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.

Steffan Harris
fuente
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

anubhava
fuente
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).

Tim Pietzcker
fuente
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]+$/
stevecomrie
fuente
Esto solo coincidirá con los caracteres latinos.
citasBro
6

[a-zA-Z] debería hacerlo bien.

Puede hacer referencia a la hoja de trucos .

Frazell Thomas
fuente
2
sí, pero también lo haría si mi cadena contuviera un carácter que no fuera de palabra que todavía coincidiría
Steffan Harris