¿Cuál es tu definición de characters? ASCII? Kanji? Iso-XXXX-X? UTF8?
Ivo Wetzel
45
¿Cuál es tu definición de regex? Perl? Emacs? Grep?
Pascal Cuoq
44
Dado que la pregunta está en inglés, en un sitio en inglés, es justo asumir que la pregunta se refiere a caracteres en inglés.
vaer-k
1
Me he dado cuenta de que \ p {L} para una letra y / u bandera para Unicode coincide con cualquier letra en mi expresión regular, es decir/\p{L}+/u
MaxZoom
44
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. Esto es verdad. Como todos sabemos, ¡los angloparlantes NUNCA localizan sus aplicaciones!
Alex
Respuestas:
392
Utilice un conjunto de caracteres: [a-zA-Z]coincide con una letra de la A a la Z en minúsculas y mayúsculas. [a-zA-Z]+coincide con una o más letras y ^[a-zA-Z]+$solo coincide con cadenas que consisten en una o más letras solamente ( ^y $marca el comienzo y el final de una cadena respectivamente).
Si desea hacer coincidir otras letras que A-Z, puede añadirlos al conjunto de caracteres: [a-zA-ZäöüßÄÖÜ]. O utiliza clases de caracteres predefinidas como la clase de propiedad de caracteres Unicode\p{L} que describe los caracteres Unicode que son letras.
Esa es una solución muy centrada en ASCII. Esto se romperá en casi cualquier texto que no esté en inglés.
Joachim Sauer
77
@Joachim Sauer: Prefiere romper idiomas usando caracteres no latinos.
Gumbo
15
Ya se rompe en el 90% del texto en alemán, ni siquiera menciones francés o español. Sin embargo, el italiano aún podría hacerlo bastante bien.
Ivo Wetzel
99
eso depende de qué definición de "carácter latino" elija. Se puede argumentar que J, U, Ö, Ä son caracteres latinos o no, según su definición. Pero todos se usan en idiomas que usan el "alfabeto latino" para escribir.
Joachim Sauer
99
\ p {L} coincide con todos los acentos de sedilla de diéresis, etc.
Radu Simionescu
198
\p{L} coincide con cualquier cosa que sea una letra Unicode si está interesado en alfabetos más allá del latín
no en todos los sabores regex. Por ejemplo, las expresiones regulares vim se tratan \pcomo "caracteres imprimibles".
Philip Potter el
3
esta página solo sugiere compatibilidad con expresiones regulares java, .net, perl, jgsoft, XML y XPath \ p {L}. Pero omisiones importantes: python y ruby (aunque python tiene el módulo regex).
Philip Potter
66
@Philip Potter: Ruby admite propiedades de caracteres Unicode usando exactamente la misma sintaxis.
Jörg W Mittag
66
Creo que esto debería ser \p{L}\p{M}*+para cubrir letras formadas por múltiples puntos de código, por ejemplo, una letra seguida de acentos. Según regular-expressions.info/unicode.html
ZoFreX
con python 3 esto produce un errorbad escape \p at position 0
matanster
46
Dependiendo de su significado de "personaje":
[A-Za-z]- todas las letras (mayúsculas y minúsculas)
Me refería a las letras. Sin embargo, no parece estar funcionando. preg_match ('/ [a-zA-Z] + /', $ nombre);
Nike
[A-Za-z] es solo la declaración de caracteres que puedes usar. Aún debe declarar cuántas veces se debe usar esta declaración: [A-Za-z] {1,2} (para que coincida con 1 o 2 letras) o [A-Za-z] {1, *} (para que coincida 1 o más letras)
@phuclv: De hecho, pero eso depende de la codificación, y la codificación es parte de la configuración del programa (ya sea la configuración predeterminada o la declarada en un archivo de configuración del programa). Cuando trabajaba en diferentes idiomas, solía almacenarlo en una constante, en un archivo de configuración.
Catalina Chircu
1
La codificación @CatalinaChircu es absolutamente irrelevante aquí. La codificación es una forma de codificar un punto de código en un conjunto de caracteres en binario, por ejemplo, UTF-8 es una codificación para Unicode. Las letras OTOH dependen del idioma, y si uno dice que [A-Za-z]son letras, entonces debe especificarse el idioma que se está usando
phuclv
32
La opción más cercana disponible es
[\u\l]+
que coincide con una secuencia de letras mayúsculas y minúsculas. Sin embargo, no es compatible con todos los editores / idiomas, por lo que probablemente sea más seguro usar
La expresión regular que pocas personas han escrito como "/ ^ [a-zA-Z] $ / i" no es correcta porque al final han mencionado / i, que no distingue entre mayúsculas y minúsculas y, después de la coincidencia por primera vez, volverá. En lugar de / i, solo uso / g, que es para global y tampoco es necesario poner ^ $ para comenzar y finalizar.
/[a-zA-Z]+/g
[a-z _] + coincide con un solo personaje presente en la lista a continuación
Cuantificador: + Entre una e ilimitadas veces, tantas veces como sea posible, devolviendo según sea necesario
Arizona un solo carácter en el rango entre a y z (mayúsculas y minúsculas)
Arizona un solo carácter en el rango entre A y Z (mayúsculas y minúsculas)
Modificador g : global. Todos los partidos (no volver en el primer partido)
\wpuede no ser una buena solución en todos los casos. Al menos en PCRE, también \wpuede coincidir con otros personajes. Citando el manual de PHP : el carácter " Una" palabra "es cualquier letra o dígito o el carácter de subrayado, es decir, cualquier carácter que puede ser parte de una" palabra "de Perl. La definición de letras y dígitos está controlada por las tablas de caracteres de PCRE, y puede variar si se realiza una coincidencia específica de la localidad. Por ejemplo, en la localidad "fr" (francés), algunos códigos de caracteres superiores a 128 se usan para letras acentuadas, y estos se corresponden con \ w ".
Amal Murali
las palabras incluyen otros caracteres de letras
V-SHY
2
\wsignifica letras y números coincidentes
Eugen Konkov
4
Si te refieres a letras en cualquier codificación de caracteres, entonces un buen enfoque podría ser eliminar letras, como espacios \s, dígitos \dy otros caracteres especiales como:
[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]
O utilice la negación de la negación anterior para describir directamente cualquier letra:
\S \D and[^..special chars..]
Pros:
Funciona con todos los sabores regex.
Fácil de escribir, a veces ahorra mucho tiempo.
Contras:
Largo, a veces no perfecto, pero la codificación de caracteres también puede romperse.
[^\W|\d]significa no \Wy no |y no \d. Tiene el mismo efecto neto ya que |es parte de \Wpero |no funciona como crees que lo hace. Incluso entonces eso significa que acepta el _personaje. Probablemente estés buscando[^\W\d_]
OGHaza
Estoy de acuerdo contigo, acepta el _. Pero "NO" |es igual a "Y", entonces [^\W|\d]significa: NO \WY NO\d
Motlab
12
[^ab]significa no ay no b. [^a|b]significa no ay no |y no b. Para dar un segundo ejemplo [a|b|c|d]es exactamente el mismo que el [abcd|||]que es exactamente el mismo que [abcd|]- todos los cuales equivalen a ([a]|[b]|[c]|[d]|[|])la |es un carácter literal, no un operador OR. El operador OR está implícito entre cada carácter en una clase de caracteres, lo que |significa que quiere que la clase acepte el carácter |(canalización).
OGHaza
1
Últimamente he usado este patrón en mis formularios para verificar nombres de personas, que contienen letras, espacios en blanco y caracteres especiales como los acentos.
characters
? ASCII? Kanji? Iso-XXXX-X? UTF8?regex
? Perl? Emacs? Grep?/\p{L}+/u
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English.
Esto es verdad. Como todos sabemos, ¡los angloparlantes NUNCA localizan sus aplicaciones!Respuestas:
Utilice un conjunto de caracteres:
[a-zA-Z]
coincide con una letra de la A a la Z en minúsculas y mayúsculas.[a-zA-Z]+
coincide con una o más letras y^[a-zA-Z]+$
solo coincide con cadenas que consisten en una o más letras solamente (^
y$
marca el comienzo y el final de una cadena respectivamente).Si desea hacer coincidir otras letras que A-Z, puede añadirlos al conjunto de caracteres:
[a-zA-ZäöüßÄÖÜ]
. O utiliza clases de caracteres predefinidas como la clase de propiedad de caracteres Unicode\p{L}
que describe los caracteres Unicode que son letras.fuente
\p{L}
coincide con cualquier cosa que sea una letra Unicode si está interesado en alfabetos más allá del latínfuente
\p
como "caracteres imprimibles".\p{L}\p{M}*+
para cubrir letras formadas por múltiples puntos de código, por ejemplo, una letra seguida de acentos. Según regular-expressions.info/unicode.htmlbad escape \p at position 0
Dependiendo de su significado de "personaje":
fuente
[A-Za-z]
son letras, entonces debe especificarse el idioma que se está usandoLa opción más cercana disponible es
que coincide con una secuencia de letras mayúsculas y minúsculas. Sin embargo, no es compatible con todos los editores / idiomas, por lo que probablemente sea más seguro usar
como sugieren otros usuarios
fuente
Usarías
[] - verifica si hay caracteres entre las entradas dadas
az --- cubre todo el alfabeto
g ----- globalmente a lo largo de toda la cadena
i ----- obteniendo mayúsculas y minúsculas
fuente
La expresión regular que pocas personas han escrito como "/ ^ [a-zA-Z] $ / i" no es correcta porque al final han mencionado / i, que no distingue entre mayúsculas y minúsculas y, después de la coincidencia por primera vez, volverá. En lugar de / i, solo uso / g, que es para global y tampoco es necesario poner ^ $ para comenzar y finalizar.
fuente
Java:
fuente
ŹŻŚĄ
Super simple ejemplo. Las expresiones regulares son extremadamente fáciles de encontrar en línea.
http://www.regular-expressions.info/reference.html
fuente
Para PHP, lo siguiente funcionará bien
fuente
Usar grupos de personajes
Coincide con cualquier carácter, excepto los dígitos 0-9
Ver ejemplo aquí
fuente
Solo usa
\w
o[:alpha:]
. Es una secuencia de escape que solo coincide con los símbolos que pueden aparecer en las palabras.fuente
\w
puede no ser una buena solución en todos los casos. Al menos en PCRE, también\w
puede coincidir con otros personajes. Citando el manual de PHP : el carácter " Una" palabra "es cualquier letra o dígito o el carácter de subrayado, es decir, cualquier carácter que puede ser parte de una" palabra "de Perl. La definición de letras y dígitos está controlada por las tablas de caracteres de PCRE, y puede variar si se realiza una coincidencia específica de la localidad. Por ejemplo, en la localidad "fr" (francés), algunos códigos de caracteres superiores a 128 se usan para letras acentuadas, y estos se corresponden con \ w ".\w
significa letras y números coincidentesSi te refieres a letras en cualquier codificación de caracteres, entonces un buen enfoque podría ser eliminar letras, como espacios
\s
, dígitos\d
y otros caracteres especiales como:O utilice la negación de la negación anterior para describir directamente cualquier letra:
Pros:
Contras:
fuente
Puedes probar esta expresión regular:
[^\W\d_]
o[a-zA-Z]
.fuente
[^\W|\d]
significa[^\W|\d]
significa no\W
y no|
y no\d
. Tiene el mismo efecto neto ya que|
es parte de\W
pero|
no funciona como crees que lo hace. Incluso entonces eso significa que acepta el_
personaje. Probablemente estés buscando[^\W\d_]
_
. Pero "NO"|
es igual a "Y", entonces[^\W|\d]
significa: NO\W
Y NO\d
[^ab]
significa noa
y nob
.[^a|b]
significa noa
y no|
y nob
. Para dar un segundo ejemplo[a|b|c|d]
es exactamente el mismo que el[abcd|||]
que es exactamente el mismo que[abcd|]
- todos los cuales equivalen a([a]|[b]|[c]|[d]|[|])
la|
es un carácter literal, no un operador OR. El operador OR está implícito entre cada carácter en una clase de caracteres, lo que|
significa que quiere que la clase acepte el carácter|
(canalización).Últimamente he usado este patrón en mis formularios para verificar nombres de personas, que contienen letras, espacios en blanco y caracteres especiales como los acentos.
fuente
A-z
coincide con más que solo letras, así comoÀ-ú
patrón = / [a-zA-Z] /
pone "[a-zA-Z]: # {pattern.match (" mine blossom ")}" OK
pone "[a-zA-Z]: # {pattern.match (" 456 ")}"
pone "[a-zA-Z]: # {pattern.match (" ")}"
pone "[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"
pone "[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" OK
fuente
fuente