expresión regular para permitir espacios entre palabras

Quiero una expresión regular que impida símbolos y solo permita letras y números. Esta 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?

tl; dr

Solo 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 siguientes casos que uno normalmente no querría igualar:

  • Una cadena vacía, “”.
  • Una cadena compuesta completamente de espacios, “”.
  • Una cadena que conduce y / o senderos con espacios, “Hello World”.
  • Una cadena que contiene espacios múltiples entre palabras, “Hola mundo”.

Originalmente, no creía que valiera la pena entrar en estos detalles, ya que OP hacía una pregunta tan básica que parecía que la severidad no era una preocupación. Ahora que la pregunta ha ganado algo de popularidad, quiero decir …

… usa la respuesta de @ stema .

Lo cual, en mi sabor (sin usar \w ) se traduce en:

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

(Por favor, vota @stema independientemente).

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

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

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

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

    Aquí sugiero el + de forma predeterminada porque, por ejemplo, los saltos de línea de Windows constan de dos espacios en blanco en secuencia, \r\n , por lo que necesitarás + para captar ambos.

¿Sigue sin funcionar?

Compruebe qué dialecto de expresiones regulares está usando. * En idiomas como Java, tendrás que escapar de tus barras diagonales inversas, es decir , \\w y \\s . En idiomas y utilidades más antiguos o más básicos, como sed , \w y \s no están definidos, entonces escríbalos con clases de caracteres, por ejemplo [a-zA-Z0-9_] y [\f\n\p\r\t] , respectivamente.


* Sé que esta pregunta está etiquetada como vb.net , pero en base a más de 25,000 vistas, supongo que no es solo la gente que se encuentra con esta pregunta. Actualmente es el primer hit en google para la frase de búsqueda, palabra espacial de expresión regular .

Una posibilidad sería simplemente agregar el espacio en su clase de caracteres, como sugirió acheong87, esto depende de cuán estricto sea usted en 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:

[a-zA-Z0-9_] \w esto es en la mayoría de los sabores [a-zA-Z0-9_] regulares el mismo 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 se dividirán por espacios.

^ coincidir el comienzo de la cadena

\w+ Coincide con 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, espera un espacio seguido de una serie de al menos un personaje de palabra

$ coincide con el final de la cadena

Este funcionó para mí

 ([\w ]+) 

Prueba con:

 ^(\w+ ?)*$ 

Explicación:

 \w - alias for [a-zA-Z_0-9] "whitespace"? - allow whitespace after word, set is as optional 

Supongo que no quieres espacio inicial / final. Esto significa que debes dividir la expresión regular en “primer personaje”, “cosas en el medio” y “último personaje”:

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

o si usa una syntax similar a Perl:

 ^\w[\w ]*\w$ 

Además: si intencionalmente redactó su expresión regular que también permite cadenas vacías, debe hacer que todo sea opcional:

 ^(\w[\w ]*\w)?$ 

Si solo quiere permitir caracteres de espacio único, se ve un poco diferente:

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

Esto coincide con 0..n palabras seguidas de un solo espacio, más una palabra sin espacio. Y hace que todo sea opcional para permitir cadenas vacías.

Esto no permite espacio al principio. Pero permite espacios entre palabras. También permite caracteres especiales entre palabras. Una buena expresión regular para los campos FirstName y LastName.

 \w+.*$ 

Solo para alfabetos:

 ^([a-zA-Z])+(\s)+[a-zA-Z]+$ 

Para valor alfanumérico y _ :

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

Esta expresión regular

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

solo permitirá un espacio único entre palabras y ningún espacio inicial o final.

A continuación está la explicación de la expresión regular:

  1. ^ Posición de confirmación al inicio de la cadena
  2. \w+ Coincide con cualquier carácter de palabra [a-zA-Z0-9_]
    1. Cuantificador: + Entre uno y un número ilimitado de veces, tantas veces como sea posible, devolviéndolo según sea necesario [codicioso]
  3. 1er grupo de captura (\s\w+)*
    1. Cuantificador: * Entre cero y un número ilimitado de veces, tantas veces como sea posible, devolviéndolo según sea necesario [codicioso]
    2. \s coincidir cualquier carácter de espacio en blanco [\r\n\t\f ]
    3. \w+ Coincide con cualquier carácter de palabra [a-zA-Z0-9_]
      1. Cuantificador: + Entre uno y un número ilimitado de veces, tantas veces como sea posible, devolviéndolo según sea necesario [codicioso]
  4. $ Posición de confirmación al final de la cadena

Eché un buen vistazo a muchas de estas supuestas respuestas …

… y bupkis después de explorar Stack Overflow, así como otros sitios para una expresión regular que coincida con cualquier cadena sin inicio ni espacio en blanco al final y solo un espacio entre palabras de caracteres estrictamente alfa.

 ^[a-zA-Z]+[(?<=\d\s]([a-zA-Z]+\s)*[a-zA-Z]+$ 

Por lo tanto, se modifica fácilmente a alfanumérico:

 ^[a-zA-Z0-9]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$ 

(Esto no coincide con palabras sueltas, solo use un interruptor / if-else con un simple ^[a-zA-Z0-9]+$ si necesita capturar palabras sueltas además).

disfrutar: D

Pruebe esto: (versión de Python)

 "(A-Za-z0-9 ){2, 25}" 

cambie el límite superior según su conjunto de datos

Encuentro que este funciona bien para un “Nombre completo”:

 ([a-z',.-]+( [a-z',.-]+)*){1,70}/ 

Todos los códigos anteriores no funcionan cuando el usuario incluye el carácter del teclado. Así que aquí está el regx cuando el usuario puede agregar cualquier carácter o palabra, pero pueden poner espacios entre palabras. Inténtalo.

  ^[^ ]+( [^ ]+)*$ 

tratar .*? para permitir espacios en blanco me funcionó

    Intereting Posts