2010-04-19 12 views
6

Me parece que conseguir que funcione con la siguiente expresión regular por preg_match():Expresión regular para unir números enteros no negativos en PHP?

@^(?:[1-9][0-9]*)|[email protected] 

Sin embargo, es raro que coincida '-0', teniendo en cuenta que no hay '-' permitido en absoluto en la expresión regular. ¿Por qué?

Lo que es más extraño es que si cambia las partes divididas por |:

@^0|(?:[1-9][0-9]*)[email protected] 

Coincide con todos los números enteros negativos, tales como '2' y '-10', etc.

Qué am Me falta aquí? ¿Alguna mejor expresión regular para un número entero no negativo?

Respuesta

5

Su expresión regular: @^(?:[1-9][0-9]*)|[email protected]

  1. dice coinciden con los número que comienzan con 1-9 seguida de un dígito o 0 veces más O
  2. partido de esos números que terminan con 0.

Claramente, -0 satisface la condición 2 para que pueda obtener el equivalente.

La expresión regular que necesita es: @^(?:[1-9][0-9]*|0)[email protected]

que coincide 0 o cualquier otro número +ve sin conducir 0. Si se permiten 0's principales, entonces todo lo que necesita verificar es si la entrada contiene dígitos para los cuales puede usar: ^\d+$, como menciona Mark.

también ¿por qué no hacer una verificación simple como:

if($input >= 0) 
// $input is non -ve. 
+0

Gracias! Funciona. :) –

+0

También puede verificar si el * comienza con cero * caso con una búsqueda anticipada, p. Ej. '/^(?! 0) \ d + $/D' (¡No olvide el modificador' D'!) – salathe

Cuestiones relacionadas