2010-10-15 13 views

Respuesta

3

Puede usar is_numeric() con la advertencia de que acepta un poco más de lo que uno normalmente quiere (por ejemplo, 1e4).

0

¿Por qué no utilizar is_numeric si no tiene experiencia con expresiones regulares?

En cuanto a su expresión regular: . coincide con todos los caracteres, \. coincide con un punto. {1} no es necesario. Y no tengo idea de qué estás tratando de hacer con [^ ... ]. Lea regular expressions tutorial si realmente desea usar expresiones regulares en algún lugar de su código.

20
/^-?(?:\d+|\d*\.\d+)$/ 

Esto coincide con las carrozas normales, p. Ej. 3.14, abreviaturas para la parte decimal, p. Ej. .5 y enteros, p. Ej. 9, así como números negativos.

+1

Debe encerrar la alternancia entre paréntesis, de lo contrario, el delimitador de inicio de cadena solo se aplicará con enteros y el delimitador de final de cadena solo con decimales. –

+0

Buena captura, fija. –

+0

Esto también me funciona para INT. Gracias. – Strabek

14

esto es lo que está buscando

$re = "~  #delimiter 
    ^   # start of input 
    -?   # minus, optional 
    [0-9]+  # at least one digit 
    (   # begin group 
     \.  # a dot 
     [0-9]+ # at least one digit 
    )   # end of group 
    ?   # group is optional 
    $   # end of input 
~xD"; 

esto sólo acepta "123" o "123.456", no" .123" o "14e + 15". Si necesita estos formularios también, intente is_numeric

+6

+1 para comentarios paso a paso – alex

+0

¿Para qué sirve D? – AntonioCS

+0

@AntonioCS es para el delimitador $ ending [referencia sobre modificadores PCRE] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php) 'D (PCRE_DOLLAR_ENDONLY) Si este modificador es set, un metacarácter de dólar en el patrón coincide solo al final de la cadena de asunto. Sin este modificador, un dólar también coincide inmediatamente antes del carácter final si se trata de una nueva línea (pero no antes de otras líneas nuevas).Este modificador se ignora si m se establece el modificador. No existe un equivalente para este modificador en Perl. FYI: la x es para Extendido: para suprimir cualquier carácter en blanco de caracteres – MediaVince

5

Las expresiones regulares son para hacer coincidir patrones de cadena. Si no está explícitamente después de validar el formato de la cadena de entrada (pero el valor real), también se puede utilizar

filter_var("1.33", FILTER_VALIDATE_FLOAT); 

para asegurarse de que la entrada se puede utilizar como un valor flotante. Esto devolverá FALSE si no es un flotante y el valor flotante o entero en caso contrario. Se aplican las reglas type juggling.

+0

Esto no se ajusta a los requisitos/descripción de OP: p. permite '123e-4' – salathe

+0

@salathe sí, como dije: úsalo cuando estés después del * valor *. No lo use si está después de validar el * formato de cadena *. '123e-4' sigue siendo un flotante (' 0.123'). – Gordon

1

Esta expresión regular:

\d*(?:\.\d+)? 

dará resultados:

123 -> true 
123.345 -> true 
123. -> true 
.345 -> true 
0.3345 -> true 

Sin embargo, es preciso comprobar si el vacío de la entrada antes de usarlo debido a la expresión regular también permite de longitud cero entrada.