Expresión regular para que coincida solo con caracteres alfabéticos


157

Me preguntaba si podría obtener una expresión regular que coincida con una cadena que solo tenga caracteres alfabéticos, y solo eso.


2
Algo como / ^ [a-zA-Z] + $ / debería funcionar.
Julian Go

10
¿Es àun carácter alfabético según su definición? Qué idioma estás usando?
Tim Pietzcker

2
¿Debería coincidir una cadena vacía?
2011

pues una cadena vacía no debe coincidir
Steffan Harris

Una nota importante: no mencionó un idioma o herramienta donde desea utilizar la expresión regular que está solicitando. Aunque los principios de las expresiones regulares son los mismos universalmente, la sintaxis no es igual en todas partes. Debe consultar dónde desea usarlo.
sergiol

Respuestas:


186

Puede usar cualquiera de estas 2 variantes:

/^[A-Z]+$/i
/^[A-Za-z]+$/

para que coincida con una cadena de entrada de alfabetos ASCII.

  • [A-Za-z] coincidirá con todos los alfabetos (minúsculas y mayúsculas).
  • ^y $se asegurará de que nada más que estos alfabetos coincidan.

Código:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

Salida:

array(0) {
}

El caso de prueba es para el comentario de OP de que quiere hacer coincidir solo si hay 1 o más alfabetos presentes en la entrada. Como puede ver en el caso de prueba, las coincidencias fallaron porque había ^en la cadena de entrada abcAbc^Xyz.

Nota: Tenga en cuenta que la respuesta anterior solo coincide con los alfabetos ASCII y no coincide con los caracteres Unicode. Si desea hacer coincidir letras Unicode, use:

/^\p{L}+$/u

Aquí, \p{L}coincide con cualquier tipo de letra de cualquier idioma


22
En algunos dialectos, [Az] coincidirá con los valores de puntuación ASCII que ocurren entre 'Z' y 'a', específicamente '[', '\', ']', '^', '-' y '' ', como así como 'A' hasta 'Z' y 'a' hasta 'z'.
Lee

Lo que realmente quería es una forma de hacer coincidir mi cadena solo cuando tiene caracteres alfabéticos, si tiene un carácter no alfabético, no debería coincidir.
Steffan Harris

77
@Lee: No algunos. Todos ellos. Esta expresión regular es incorrecta en su estado actual.
Tim Pietzcker

77
\w is shorthand for A-Za-z- en realidad no, \wes la abreviatura de[a-zA-Z0-9_]
anubhava

1
Buen punto @ jpmc26. He editado mi respuesta para eliminar mi error original.
anubhava

55

Si necesita incluir caracteres alfabéticos no ASCII, y si su sabor regex es compatible con Unicode, entonces

\A\pL+\z

Sería la expresión regular correcta.

Algunos motores de expresiones regulares no son compatibles con esta sintaxis Unicode pero permiten que la \wtaquigrafía alfanumérica también coincida con caracteres no ASCII. En ese caso, puede obtener todos los alfabéticos restando dígitos y guiones bajos de \westa manera:

\A[^\W\d_]+\z

\Acoincide al comienzo de la cadena, \zal final de la cadena ( ^y $también coincide al inicio / final de las líneas en algunos idiomas como Ruby, o si se establecen ciertas opciones de expresiones regulares).


38
+1 por no considerar el alfabeto inglés como el único alfabeto
srcspider

77
+1, igual que el anterior. el inglés no es el único alfabeto y muchas personas escriben su nombre usando caracteres que no son ascii para expresarlo correctamente.
Ben Barkay

22

Esto coincidirá con uno o más caracteres alfabéticos:

/^[a-z]+$/

Puede hacerlo sin distinción entre mayúsculas y minúsculas utilizando:

/^[a-z]+$/i

o:

/^[a-zA-Z]+$/

Esto solo coincidirá con los caracteres latinos.
citasBro


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.