2012-02-07 11 views
5

Tengo problemas para validar la entrada de dinero. He usado algunos consejos de mis otras preguntas para escribir un código mejor. Lo siguiente es lo que estoy usando para validar si la entrada es dinero o no.Validar mi dinero

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

Los resultados no son dinero, lo cual es bastante confuso para mí.

+0

¿Qué es 'myIsMaybeMoneyValidator'? ¿Dónde está definido? – Oded

+0

Esperando una solución de expresiones regulares ... También, ¿por qué no usas regex? Apuesto a que hay muchos buenos ejemplos de ellos para USD. –

+0

Necesita aprender Expresiones regulares – JoelFan

Respuesta

11

Parece que hay una validación integrada para dinero en C#.

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

DE: https://stackoverflow.com/a/617847/290822

+0

Esto funcionó, gracias. –

1

Trate decimal.TryParse (myTest4, NumberStyles.Currency, nuevo CultureInfo ("en-US"), fuera myResult4)

0

sólo tiene que utilizar:

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

Si quiere saber qué le pasa a su código, probablemente sea Microsoft.VisualBasic.Information. IsNumeric (theirMaybeNumber); No maneja las comas.

+1

hmm duplicación de mi respuesta ... excepto para intimidar al OP ... –

+1

IsNumeric también devuelve True si Expression contiene una expresión numérica válida que comienza con un carácter + o - o contiene comas. –