Qual é a sua definição characters? ASCII? Kanji? ISO-XXXX-X? UTF8?
Ivo Wetzel
45
Qual é a sua definição regex? Perl? Emacs? Grep?
Pascal Cuoq 01/09/10
4
Dado que a pergunta está em inglês, em um site em inglês, é justo supor que a pergunta se refere a caracteres em inglês.
vaer-k 17/07/19
11
Eu notei que \ p {L} para uma letra e / u sinalizador para o Unicode corresponde a qualquer letra no meu regex, ou seja, /\p{L}+/u
MaxZoom
4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. Isso é verdade. Como todos sabemos, os falantes de inglês NUNCA localizam suas aplicações!
Alex
Respostas:
392
Use um conjunto de caracteres: [a-zA-Z]corresponde a uma letra de A – Z em minúsculas e maiúsculas. [a-zA-Z]+corresponde a uma ou mais letras e ^[a-zA-Z]+$corresponde apenas a seqüências que consistem em apenas uma ou mais letras ( ^e $marca o início e o fim de uma sequência, respectivamente).
Se você quiser combinar outras letras que A-Z, você pode adicioná-los ao conjunto de caracteres: [a-zA-ZäöüßÄÖÜ]. Ou você usa classes de caracteres predefinidas, como a classe de propriedade de caracteres Unicode,\p{L} que descreve os caracteres Unicode que são letras.
Essa é uma solução muito centrada em ASCII. Isso interromperá praticamente qualquer texto que não seja em inglês.
Joachim Sauer
7
@Joachim Sauer: Ele prefere quebrar idiomas usando caracteres não latinos.
Gumbo
15
Já quebra 90% do texto em alemão, nem menciona francês ou espanhol. O italiano ainda pode se sair muito bem.
Ivo Wetzel
9
isso depende da definição de "caractere latino" que você escolher. J, U, Ö, Ä podem ser considerados caracteres latinos ou não, com base em sua definição. Mas todos eles são usados em idiomas que usam o "alfabeto latino" para escrever.
Joachim Sauer
9
\ p {L} corresponde a todos os acentos de trema, etc, então você deve concordar com isso.
Radu Simionescu
198
\p{L} corresponde a qualquer letra que seja Unicode se você estiver interessado em alfabetos além do latim
não em todos os sabores de regex. Por exemplo, as expressões regulares do vim são tratadas \pcomo "Caractere imprimível".
Philip Potter
3
esta página sugere apenas os regexes java, .net, perl, jgsoft, XML e XPath suportados \ p {L}. Mas grandes omissões: python e ruby (embora python tenha o módulo regex).
Philip Potter
6
@ Philip Potter: Ruby suporta propriedades de caracteres Unicode usando exatamente a mesma sintaxe.
Jörg W Mittag
6
Eu acho que isso deve ser \p{L}\p{M}*+para cobrir cartas compostas de vários pontos de código, por exemplo, uma letra seguida por acentos. Como por regular-expressions.info/unicode.html
ZoFreX
com o pitão 3 este produz um errobad escape \p at position 0
matanster
46
Dependendo do seu significado de "personagem":
[A-Za-z]- todas as letras (maiúsculas e minúsculas)
Eu quis dizer letras. Não parece estar funcionando embora. preg_match ('/ [a-zA-Z] + /', $ nome);
Nike
[A-Za-z] é apenas a declaração de caracteres que você pode usar. Você ainda precisa declarar quantas vezes essa declaração deve ser usada: [A-Za-z] {1,2} (para corresponder a 1 ou 2 letras) ou [A-Za-z] {1, *} (para corresponder 1 ou mais letras)
@ phuclv: De fato, mas isso depende da codificação, e a codificação faz parte das configurações do programa (a configuração padrão ou a declarada em um arquivo de configuração do programa). Quando trabalhei em diferentes idiomas, costumava armazenar isso em uma constante, em um arquivo de configuração.
Catalina Chircu 14/10/19
11
A codificação @CatalinaChircu é absolutamente irrelevante aqui. Codificação é uma maneira de codificar um ponto de código em um conjunto de caracteres em binário, por exemplo, UTF-8 é uma codificação para Unicode. Cartas OTOH depende do idioma, e se alguém diz que [A-Za-z]são letras, em seguida, o idioma que está sendo usado deve ser especificado
phuclv
32
A opção mais próxima disponível é
[\u\l]+
que corresponde a uma sequência de letras maiúsculas e minúsculas. No entanto, não é suportado por todos os editores / idiomas, portanto, provavelmente é mais seguro usar
A expressão regular que poucas pessoas escreveram como "/ ^ [a-zA-Z] $ / i" não está correta, porque no final mencionaram / i, o que é sensível a maiúsculas e minúsculas e após a correspondência pela primeira vez, ele retornará. Em vez de / i, basta usar / g, que é global e você também não precisa colocar ^ $ para iniciar e terminar.
/[a-zA-Z]+/g
[a-z _] + corresponde a um único caractere presente na lista abaixo
Quantificador: + Entre uma e várias vezes, quantas vezes for possível, devolvendo conforme necessário
az um único caractere no intervalo entre a e z (diferencia maiúsculas de minúsculas)
AZ um único caractere no intervalo entre A e Z (diferencia maiúsculas de minúsculas)
modificador g : global. Todas as partidas (não retorne na primeira partida)
\wpode não ser uma boa solução em todos os casos. Pelo menos no PCRE, também \wpode corresponder a outros caracteres. Citando o manual do PHP : " A" palavra "caractere é qualquer letra ou dígito ou o caractere sublinhado, ou seja, qualquer caractere que possa fazer parte de uma" palavra "Perl. A definição de letras e dígitos é controlada pelas tabelas de caracteres do PCRE, e pode variar se a correspondência específica de local estiver ocorrendo. Por exemplo, no local "fr" (francês), alguns códigos de caracteres maiores que 128 são usados para letras acentuadas e correspondem a \ w ".
Amal Murali
palavras incluem caracteres de outras letras
V-SHY
2
\wsignifica letras e números correspondentes
Eugen Konkov 26/08
4
Se você quer dizer letras em qualquer codificação de caracteres, uma boa abordagem pode ser excluir não letras, como espaços \s, dígitos \de outros caracteres especiais, como:
[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]
Ou use a negação acima para descrever diretamente qualquer letra:
\S \D and[^..special chars..]
Prós:
Funciona com todos os sabores de regex.
Fácil de escrever, às vezes economiza muito tempo.
Contras:
Longo, às vezes não perfeito, mas a codificação de caracteres também pode ser quebrada.
[^\W|\d]significa não \We não |e não \d. Ele tem o mesmo efeito líquido desde que |faz parte, \Wmas |não funciona como você pensa. Mesmo assim, isso significa que ele aceita o _personagem. Você provavelmente está procurando[^\W\d_]
OGHaza
Eu concordo com você, ele aceita o _. Mas "NOT" |é igual a "AND", então [^\W|\d]significa: NOT \WAND NOT\d
Motlab
12
[^ab]significa não ae não b.[^a|b]significa não ae não |e não b. Dar um segundo exemplo [a|b|c|d]é exatamente o mesmo [abcd|||]que é exatamente o mesmo [abcd|]- todos os quais equivalem ([a]|[b]|[c]|[d]|[|])a |é um caractere literal, não um operador OR. O operador OR está implícito entre cada caractere em uma classe de caractere, colocando um |meio real de que você deseja que a classe aceite o |caractere (canal).
OGHaza
1
Ultimamente, tenho usado esse padrão em meus formulários para verificar nomes de pessoas, contendo letras, espaços em branco e caracteres especiais, como sinais de destaque.
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.
Isso é verdade. Como todos sabemos, os falantes de inglês NUNCA localizam suas aplicações!Respostas:
Use um conjunto de caracteres:
[a-zA-Z]
corresponde a uma letra de A – Z em minúsculas e maiúsculas.[a-zA-Z]+
corresponde a uma ou mais letras e^[a-zA-Z]+$
corresponde apenas a seqüências que consistem em apenas uma ou mais letras (^
e$
marca o início e o fim de uma sequência, respectivamente).Se você quiser combinar outras letras que A-Z, você pode adicioná-los ao conjunto de caracteres:
[a-zA-ZäöüßÄÖÜ]
. Ou você usa classes de caracteres predefinidas, como a classe de propriedade de caracteres Unicode,\p{L}
que descreve os caracteres Unicode que são letras.fonte
\p{L}
corresponde a qualquer letra que seja Unicode se você estiver interessado em alfabetos além do latimfonte
\p
como "Caractere imprimível".\p{L}\p{M}*+
para cobrir cartas compostas de vários pontos de código, por exemplo, uma letra seguida por acentos. Como por regular-expressions.info/unicode.htmlbad escape \p at position 0
Dependendo do seu significado de "personagem":
fonte
[A-Za-z]
são letras, em seguida, o idioma que está sendo usado deve ser especificadoA opção mais próxima disponível é
que corresponde a uma sequência de letras maiúsculas e minúsculas. No entanto, não é suportado por todos os editores / idiomas, portanto, provavelmente é mais seguro usar
como outros usuários sugerem
fonte
Você usaria
[] - verifica se há caracteres entre as entradas fornecidas
az --- cobre todo o alfabeto
g ----- globalmente em toda a cadeia
i ----- ficando em maiúsculas e minúsculas
fonte
A expressão regular que poucas pessoas escreveram como "/ ^ [a-zA-Z] $ / i" não está correta, porque no final mencionaram / i, o que é sensível a maiúsculas e minúsculas e após a correspondência pela primeira vez, ele retornará. Em vez de / i, basta usar / g, que é global e você também não precisa colocar ^ $ para iniciar e terminar.
fonte
Java:
fonte
ŹŻŚĄ
Exemplo super simples. Expressões regulares são extremamente fáceis de encontrar online.
http://www.regular-expressions.info/reference.html
fonte
Para PHP, a seguir funcionará bem
fonte
Use grupos de caracteres
Corresponde a qualquer caractere, exceto os dígitos de 0 a 9.
Veja o exemplo aqui
fonte
Basta usar
\w
ou[:alpha:]
. É uma sequência de escape que corresponde apenas aos símbolos que podem aparecer em palavras.fonte
\w
pode não ser uma boa solução em todos os casos. Pelo menos no PCRE, também\w
pode corresponder a outros caracteres. Citando o manual do PHP : " A" palavra "caractere é qualquer letra ou dígito ou o caractere sublinhado, ou seja, qualquer caractere que possa fazer parte de uma" palavra "Perl. A definição de letras e dígitos é controlada pelas tabelas de caracteres do PCRE, e pode variar se a correspondência específica de local estiver ocorrendo. Por exemplo, no local "fr" (francês), alguns códigos de caracteres maiores que 128 são usados para letras acentuadas e correspondem a \ w ".\w
significa letras e números correspondentesSe você quer dizer letras em qualquer codificação de caracteres, uma boa abordagem pode ser excluir não letras, como espaços
\s
, dígitos\d
e outros caracteres especiais, como:Ou use a negação acima para descrever diretamente qualquer letra:
Prós:
Contras:
fonte
Você pode tentar esta expressão regular:
[^\W\d_]
ou[a-zA-Z]
.fonte
[^\W|\d]
significa #[^\W|\d]
significa não\W
e não|
e não\d
. Ele tem o mesmo efeito líquido desde que|
faz parte,\W
mas|
não funciona como você pensa. Mesmo assim, isso significa que ele aceita o_
personagem. Você provavelmente está procurando[^\W\d_]
_
. Mas "NOT"|
é igual a "AND", então[^\W|\d]
significa: NOT\W
AND NOT\d
[^ab]
significa nãoa
e nãob
.[^a|b]
significa nãoa
e não|
e nãob
. Dar um segundo exemplo[a|b|c|d]
é exatamente o mesmo[abcd|||]
que é exatamente o mesmo[abcd|]
- todos os quais equivalem([a]|[b]|[c]|[d]|[|])
a|
é um caractere literal, não um operador OR. O operador OR está implícito entre cada caractere em uma classe de caractere, colocando um|
meio real de que você deseja que a classe aceite o|
caractere (canal).Ultimamente, tenho usado esse padrão em meus formulários para verificar nomes de pessoas, contendo letras, espaços em branco e caracteres especiais, como sinais de destaque.
fonte
A-z
combina mais do que apenas letras, bem comoÀ-ú
padrão = / [a-zA-Z] /
coloca "[a-zA-Z]: # {pattern.match (" mine blossom ")}" "OK
coloca "[a-zA-Z]: # {pattern.match (" 456 ")}"
coloca "[a-zA-Z]: # {pattern.match (" ")}"
coloca "[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"
coloca "[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" OK
fonte
fonte