Expresión regular para permitir espacios entre palabras.

Resuelto Laurence asked hace 11 años • 13 respuestas

Quiero una expresión regular que evite símbolos y solo permita letras y números. La siguiente expresión regular funciona muy bien, pero no permite espacios entre palabras.

^[a-zA-Z0-9_]*$

Por ejemplo, cuando se utiliza esta expresión regular, "HelloWorld" está bien, pero "Hello World" no coincide.

¿Cómo puedo modificarlo para permitir espacios?

Laurence avatar Mar 18 '13 15:03 Laurence
Aceptado

tl; dr

Simplemente agrega un espacio en tu clase de personaje .

^[a-zA-Z0-9_ ]*$

 


Ahora, si quieres ser estricto...

Lo anterior no es exactamente correcto. Debido al hecho de que *significa cero o más , coincidiría con todos los casos siguientes que normalmente no se pretende que coincidan:

  • Una cadena vacía, "".
  • Una cadena compuesta enteramente de espacios, " ".
  • Una cadena que va delante y/o detrás con espacios, "Hola mundo".
  • Una cadena que contiene varios espacios entre palabras, "Hola mundo".

Al principio no pensé que valiera la pena entrar en esos detalles, ya que OP estaba haciendo una pregunta tan básica que parecía que el rigor no era una preocupación. Sin embargo, ahora que la pregunta ha ganado cierta popularidad, quiero decir...

... usa la respuesta de @stema .

Lo cual, en mi opinión (sin usar \w) se traduce en:

^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$

(Por favor vote a favor de @stema de todos modos).

Algunas cosas a tener en cuenta sobre esta respuesta (y la de @stema):

  • Si desea permitir múltiples espacios entre palabras (por ejemplo, si desea permitir espacios dobles accidentales o si está trabajando con texto copiado y pegado de un PDF), agregue un espacio +después del espacio:

    ^\w+( +\w+)*$
    
  • Si desea permitir tabulaciones y nuevas líneas (caracteres de espacio en blanco), reemplace el espacio con \s+:

    ^\w+(\s+\w+)*$
    

    Aquí sugiero el +valor predeterminado porque, por ejemplo, los saltos de línea de Windows constan de dos caracteres de espacio en blanco en secuencia, \r\npor lo que necesitarás +capturar ambos.

¿Sigue sin funcionar?

Comprueba qué dialecto de expresiones regulares estás usando. * En lenguajes como Java tendrás que evitar las barras invertidas, es decir \\w , y \\s. En lenguajes y utilidades más antiguos o más básicos, como sedy \wno \sestán definidos, escríbalos con clases de caracteres, por ejemplo [a-zA-Z0-9_] y [\f\n\p\r\t], respectivamente.

 


* Sé que esta pregunta está etiquetadavb.net, pero según más de 25.000 visitas, supongo que no son solo esas personas las que se enfrentan a esta pregunta. Actualmente es el primer resultado en Google para la frase de búsqueda, palabra con espacio de expresión regular .

Andrew Cheong avatar Mar 18 '2013 08:03 Andrew Cheong

Una posibilidad sería simplemente agregar el espacio a su clase de caracteres, como sugirió acheong87, esto depende de qué tan estricto sea con su patrón, porque esto también permitiría una cadena que comience con 5 espacios, o cadenas que consten solo de espacios.

La otra posibilidad es definir un patrón:

Usaré \westo en la mayoría de los tipos de expresiones regulares de la misma manera que [a-zA-Z0-9_](en algunos está basado en Unicode)

^\w+( \w+)*$

Esto permitirá una serie de al menos una palabra y las palabras estarán divididas por espacios.

^Coincide con el inicio de la cadena.

\w+Haga coincidir una serie de al menos un carácter de palabra

( \w+)*es un grupo que se repite 0 o más veces. En el grupo se espera un espacio seguido de una serie de al menos un carácter de palabra.

$coincide con el final de la cadena

stema avatar Mar 18 '2013 09:03 stema

Este funcionó para mí

([\w ]+)
Mario Rugeles Perez avatar Jan 13 '2014 22:01 Mario Rugeles Perez