2012-02-07 29 views
5

Tôi đang gặp một số sự cố khi xác thực số tiền đầu vào. Tôi đã sử dụng một số gợi ý từ các câu hỏi khác của tôi để viết một số mã tốt hơn. Sau đây là những gì tôi đang sử dụng để xác nhận xem đầu vào có phải là tiền hay không.Xác nhận tiền của tôi

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); 
} 

Kết quả không phải là tiền, điều này khá khó hiểu với tôi.

+0

'myIsMaybeMoneyValidator' là gì? Nó được định nghĩa ở đâu? – Oded

+0

Đang chờ giải pháp regex ... Ngoài ra tại sao bạn không sử dụng regex Tôi đặt cược có rất nhiều ví dụ rất tốt về chúng cho USD. –

+0

Bạn cần phải học Cụm từ thông dụng – JoelFan

Trả lời

11

Có vẻ như có xác thực nội bộ để nhận tiền trong C#.

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

TỪ: https://stackoverflow.com/a/617847/290822

+0

Điều này có hiệu quả, cảm ơn bạn. –

1

Hãy thử decimal.TryParse (myTest4, NumberStyles.Currency, mới CultureInfo ("en-US"), ra myResult4)

0

Chỉ cần sử dụng:

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

Nếu bạn muốn biết mã của mình có vấn đề gì, có thể là Microsoft.VisualBasic.Information. IsNumeric (yourMaybeNumber); Không xử lý dấu phẩy.

+1

hmm trùng lặp câu trả lời của tôi ... ngoại trừ browbeating OP .. –

+1

IsNumeric cũng trả về True nếu Expression chứa một biểu thức số hợp lệ bắt đầu bằng dấu + hoặc - hoặc chứa dấu phẩy. –

Các vấn đề liên quan