2010-07-14 43 views
18

¿Alguien me puede ayudar a crear esta expresión regular? Necesito que compruebe si la cadena es completamente en blanco (vacía) o si solo contiene números enteros positivos. Si algo más falla Esto es lo que tengo hasta ahora.regex permitir solo números o cadena vacía

/^\s*|[0-9][0-9]*/ 
+1

[0-9] [0-9] * es lo mismo que [0-9] + – zvone

Respuesta

32

que estás buscando:

/^(\s*|\d+)$/ 

Si usted quiere un número positivo sin ceros a la izquierda, use [1-9][0-9]*

Si no se preocupan por espacios en blanco alrededor de el número, también puede probar:

/^\s*\d*\s*$/ 

Tenga en cuenta que no desea permitir la coincidencia parcial, por ejemplo 123abc, por lo que necesita los anclajes inicial y final: ^...$.
Su expresión regular tiene un error común: ^\s*|\d+$, por ejemplo, no exige una coincidencia completa, ya que es lo mismo que (^\s*)|(\d+$), lectura, espacios al comienzo o dígitos al final.

+0

su segundo ejemplo solo coincidirá con el espacio en blanco si está al principio o al final ... no coincidiría con "1 2 3" – Cfreak

+0

@Cfreak - correcto. Dice * alrededor * :) – Kobi

+0

@Cfreak, ¿por qué te gustaría hacer coincidir '1 2 3' – CaffGeek

1

Usted puede tratar de IT

/^\d*$/ 

Para que coincida con el blanco espacio-

/^[\s\d\s]*$/ 
+1

que no coincide con el espacio en blanco – Cfreak

3

Kobi tiene una buena respuesta, pero que técnicamente no tiene que capturarlo (a menos que vas hacer algo la salida)

/^[\s\d]+$/ 

O si no le importa si la cadena está completamente vacío (es decir, "")

/^[\s\d]*$/ 

Para aclarar Entiendo que la pregunta original significa que los espacios en blanco en la cadena deben ignorarse.

+0

El problema con '/^[\ s \ d] * $ /' es que coincide con cosas como '123 123' – CaffGeek

+1

A menos que esté equivocado, el grupo en la respuesta de Kobi no es para capturar el número, más bien es para mantener los anclajes ('^' y '$') lejos de '|' –

1
^\d+([\.\,][0]{2})?$ 

Me pareció que esto funcionó para mí. Permitir cualquier número entero, pero sólo un decimal de 0,00

Pass

  • 100,00
  • 101,00
  • 1000,00

falla

  • 101,01
  • 1000,99

probarlo al http://regexpal.com/

1

Para hacer coincidir un número o una cadena vacía '' i.e el usuario no ha introducido ningún entrada de hacer esto

(^[0-9]+$|^$) 

Para hacer coincidir un número, una cadena vacía, o un carácter de espacio en blanco

(^[0-9]+$|^$|^\s$) 

Prueba esto en regex101

Cuestiones relacionadas