2011-09-10 40 views
8

Estoy buscando una expresión regular Javascript para asegurarme de que la cadena contiene solo espacios, letras y ñ - mayúsculas y minúsculas insensiblemente.Javascript regex para aceptar solo letras, espacios, y ñ

Ya lo intenté: /^[A-Za-z _]*[A-Za-z][A-Za-z _]*$/ pero no acepta ñ.

+0

Probé:/^ [A-Za-z _] * [A-Za-z] [A-Za-z _] * $/- Pero esto no acepta - Valores. –

+0

Ok, parece que su pregunta es realmente acerca de cómo manejar caracteres no ASCII en expresiones regulares. –

+1

Sí, porque solo necesito un valor ASCII en este caso ñ –

Respuesta

11
/^[ñA-Za-z _]*[ñA-Za-z][ñA-Za-z _]*$/ 

y

/^[\u00F1A-Za-z _]*[\u00F1A-Za-z][\u00F1A-Za-z _]*$/ 

debería funcionar.

Javascript regex admite \u0000 hasta \uFFFF.

+0

Su respuesta ayudó ¡Mi mucho! Gracias –

+3

Eso es fundamentalmente defectuoso en el sentido de que no le dijiste primero que ejecutara sus datos a través de una conversión NFC. Si no lo hace, esos patrones no funcionan. Estoy bastante seguro de que realmente quiere '[aábcdeéfghijklmnñoópqrstuúüvwxyzAÁBCDEÉFGHIJKLMNÑOÓPQRSTUÚÜVWXYZ]' para el alfabeto español, ¡pero eso solo funcionará si sincronizas los datos! – tchrist

4

Si simplemente desea ese caracter, insértelo en el Regex, como [A-Za-zÑñ ]. De lo contrario, utilice una biblioteca Regex que sepa Unicode para Javascript como http://xregexp.com/. Tristemente JS Regexes no admite clases de caracteres compatibles con Unicode (como \p{L} en C# expresiones regulares)

+0

¿C realmente te hace escribir '\ p {L}' en lugar de solo '\ pL' ????? Eso es realmente tonto, porque triplica la longitud del especificador para los 7 casos más comunes. Esa es una falla de Huffman. Alguien no era muy inteligente. Necesitas hacer que '\ pL' solo sea un poco más difícil de escribir que' \ w'. De lo contrario, la gente no lo usará. '\ p {L}' es un error de diseño. – tchrist

+0

@tchrist PERO al final es menos del doble de la longitud de la "expresión". '\ p {L}' es 5 caracteres y \ pL es 3. Sí, \ pL sería mejor, pero creo que el soporte de caracteres no BMP y \ X sería MUCHO más importante :-) – xanatos

1

Debe usar una clase de caracteres.

/[A-Za-z ñ]+/ 
Cuestiones relacionadas