is_numeric()
prueba si el valor es un número. Sin embargo, no necesariamente tiene que ser un número entero: podría ser un número decimal o un número en notación científica.
El ejemplo preg_match()
que ha dado solo comprueba que un valor contiene los dígitos cero a nueve; cualquier número de ellos, y en cualquier secuencia.
Tenga en cuenta que la expresión regular que ha dado también no es un comprobador de enteros perfecto, de la forma en que lo ha escrito.No permite negativos sí permite una cadena de longitud cero (es decir, sin ningún dígito, que presumiblemente no debería ser válida?), y permite que el número tenga cualquier número de ceros a la izquierda, lo que de nuevo puede no ser el deseado.
[EDIT]
De acuerdo con su comentario, una mejor expresión regular podría tener este aspecto:
/^[1-9][0-9]*$/
Fuerza al primer dígito solamente estar entre 1 y 9, por lo que no puede tener ceros a la izquierda También lo obliga a tener al menos un dígito de longitud, por lo que resuelve el problema de cadena de longitud cero.
No le preocupan los aspectos negativos, por lo que no es un problema.
Es posible que desee restringir el número de dígitos, porque tal como están las cosas, permitirá que las cadenas que son demasiado grandes se almacenen como enteros. Para limitar este, que iba a cambiar la estrella en una restricción de longitud de este modo:
/^[1-9][0-9]{0,15}$/
Esto permitiría a la cadena a estar entre 1 y 16 dígitos de longitud (es decir, el primer dígito se añaden otros 0-15 dígitos). Siéntase libre de ajustar los números en las llaves para satisfacer sus propias necesidades. Si desea una cadena de longitud fija, solo necesita especificar un número entre las llaves.
Espero que ayude.
Entonces, con la Regex ¿cómo se puede rectificar el problema de los ceros a la izquierda, etc.? Esto podría causarme problemas después de todo, ya que este es el método que he estado usando. Si solo quiero validar que era un número entero (4,8,15,16,23,42,108 etc.), sin ceros a la izquierda, sin puntos decimales, sin negativos, ¿cómo se lograría esto? – Joe
@JoeMottershaw - Editaré la respuesta para agregar más información ... – Spudley
Gracias, Spudley, esa es una explicación muy clara: definitivamente entiendo mejor sus diferencias. ¡Parece que volveré y ajustaré un poco mi código! :) – Joe