2012-02-07 16 views
5

मुझे धन इनपुट मान्य करने में कुछ परेशानी हो रही है। मैंने कुछ बेहतर कोड लिखने के लिए अपने अन्य सवालों से कुछ पॉइंटर्स का उपयोग किया है। इनपुट का पैसा है या नहीं, यह सत्यापित करने के लिए मैं निम्नलिखित का उपयोग कर रहा हूं।मेरे पैसे की पुष्टि

static void Main(string[] args) 
{ 
    string myTest1 = "$1,234.56"; 
    string myTest2 = "$1.00"; 
    string myTest3 = "$1000.01"; 
    string myTest4 = "$1,234,567.89"; 

    myIsMaybeMoneyValidator Miimv = new myIsMaybeMoneyValidator(); 

    bool myResult1 = Miimv.isMaybeMoney(myTest1); 
    bool myResult2 = Miimv.isMaybeMoney(myTest2); 
    bool myResult3 = Miimv.isMaybeMoney(myTest3); 
    bool myResult4 = Miimv.isMaybeMoney(myTest4); 
} 

public bool isMaybeMoney(object theirMaybeMoney) 
{ 
    string myMaybeMoney = theirMaybeMoney.ToString(); 

    if (myMaybeMoney.StartsWith("-")) 
    { 
     myMaybeMoney.Remove(0, 1); 
    } 

    if (!myMaybeMoney.StartsWith("$")) 
    { 
     return false; 
    } 

    myMaybeMoney.Remove(0, 1); 

    string[] myMaybeMoneyStringArray = myMaybeMoney.Split('.'); 

    string myMaybeMoneyDollars = myMaybeMoneyStringArray[0]; 
    string myMaybeMoneyCents = myMaybeMoneyStringArray[1]; 

    if (!isDollars(myMaybeMoneyDollars)) 
    { 
     return false; 
    } 

    if (!isCents(myMaybeMoneyCents)) 
    { 
     return false; 
    } 

    return true; 
} 

private bool isDollars(string theirMaybeMoneyDollars) 
{ 
    if (!isNumber(theirMaybeMoneyDollars)) 
     return false; 

    try 
    { 
     int myMaybeDollars = Convert.ToInt32(theirMaybeMoneyDollars); 

     if (myMaybeDollars < 1) 
      return false; 

     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 

    return true; 
} 

private bool isCents(string theirMaybeMoneyCents) 
{ 
    if (!isNumber(theirMaybeMoneyCents)) 
     return false; 

    try 
    { 
     int myMaybeCents = Convert.ToInt32(theirMaybeMoneyCents); 

     if (myMaybeCents > 99) 
      return false; 
     if (myMaybeCents < 1) 
      return false; 

     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 

    return true; 
} 

private bool isNumber(object theirMaybeNumber) 
{ 
    return Microsoft.VisualBasic.Information.IsNumeric(theirMaybeNumber); 
} 

परिणाम सभी पैसे नहीं हैं, जो मुझे बहुत भ्रमित कर रहा है।

+0

'myIsMaybeMoneyValidator' क्या है? यह कहां परिभाषित किया जाता है? – Oded

+0

रेगेक्स समाधान की प्रतीक्षा कर रहा है ... इसके अलावा आप रेगेक्स I शर्त का उपयोग क्यों नहीं कर रहे हैं, उनके लिए अमरीकी डालर के बहुत अच्छे उदाहरण हैं। –

+0

आपको नियमित अभिव्यक्तियों को सीखना होगा – JoelFan

उत्तर

11

ऐसा लगता है कि सी # में पैसे के लिए एक अंतर्निहित सत्यापन है।

float num; 
bool isValid = float.TryParse(str, 
NumberStyles.Currency, 
CultureInfo.GetCultureInfo("en-US"), // cached 
out num); 

से: https://stackoverflow.com/a/617847/290822

+0

यह काम करता है, धन्यवाद। –

1

प्रयास करें decimal.TryParse (myTest4, NumberStyles.Currency, नई CultureInfo ("en-US"), myResult4 बाहर)

0

बस का उपयोग करें:

float value; 
bool isMoney= float.TryParse(str, 
    NumberStyles.Currency, 
    CultureInfo.GetCultureInfo("en-US"), 
    out value); 

यदि आप जानना चाहते हैं कि आपके कोड में क्या गलत है, तो शायद यह माइक्रोसॉफ्ट है। VisualBasic.Information। IsNumeric (theirMaybeNumber); अल्पविरामों को संभालने में नहीं।

+1

मेरे उत्तर का हम्म डुप्लिकेशंस ... ओपी को ब्रोबेबी करने के अलावा .. –

+1

IsNumeric भी सही लौटाता है अगर अभिव्यक्ति में एक वैध संख्यात्मक अभिव्यक्ति होती है जो + या - चरित्र से शुरू होती है या अल्पविराम शामिल होती है। –

संबंधित मुद्दे