Expressão regular para corresponder apenas a caracteres alfabéticos

157

Eu queria saber se eu poderia obter uma expressão regular que corresponderá a uma string que possui apenas caracteres alfabéticos, e somente isso.

Steffan Harris
fonte
2
Algo como / ^ [a-zA-Z] + $ / deve funcionar.
Julian Go
10
É àum caractere alfabético de acordo com a sua definição? Que linguagem você está usando?
Tim Pietzcker
2
uma string vazia deve corresponder?
ysth 20/05/11
Nope uma cadeia vazia não deve corresponder
Steffan Harris
Uma observação importante: você não indicou um idioma ou ferramenta em que deseja usar o regex que está solicitando. Embora os princípios das regexes sejam os mesmos universalmente, a sintaxe não está em todos os lugares. Você deve indicar onde deseja usá-lo.
Sergiol 20/05

Respostas:

186

Você pode usar qualquer uma destas 2 variantes:

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

para corresponder a uma sequência de entrada de alfabetos ASCII.

  • [A-Za-z] corresponderá a todos os alfabetos (minúsculos e maiúsculos).
  • ^e $garantirá que apenas esses alfabetos sejam correspondidos.

Código:

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

Resultado:

array(0) {
}

O caso de teste é para o comentário do OP que ele deseja corresponder apenas se houver 1 ou mais alfabetos presentes na entrada. Como você pode ver no caso de teste, as correspondências falharam porque havia ^na sequência de entrada abcAbc^Xyz.

Nota: Observe que a resposta acima corresponde apenas aos alfabetos ASCII e não aos caracteres Unicode. Se você deseja combinar letras Unicode, use:

/^\p{L}+$/u

Aqui, \p{L}corresponde a qualquer tipo de letra de qualquer idioma

anubhava
fonte
22
Em alguns dialetos, [Az] corresponderá aos valores de pontuação ASCII que ocorrem entre 'Z' e 'a', especificamente '[', '\', ']', '^', '-' e '', como bem como 'A' a 'Z' e 'a' a 'z'.
Lee
O que eu realmente queria é uma maneira de combinar minha string apenas quando ela tiver caracteres alfabéticos, se tiver um caracter não alfabético, não deverá corresponder.
Steffan Harris
7
@ Lee: Não alguns. Todos eles. Este regex está incorreto em seu estado atual.
Tim Pietzcker
7
\w is shorthand for A-Za-z- Não, realmente, \wé uma abreviação para[a-zA-Z0-9_]
anubhava
1
Bom ponto @ jpmc26. Eu editei minha resposta para remover meu erro original.
Anubhava
55

Se você precisar incluir caracteres alfabéticos não ASCII e se o seu sabor regex for compatível com Unicode,

\A\pL+\z

seria o regex correto.

Alguns mecanismos regex não suportam essa sintaxe Unicode, mas permitem que a \wabreviação alfanumérica também corresponda a caracteres não ASCII. Nesse caso, você pode obter todos os alfabéticos subtraindo dígitos e sublinhados da \wseguinte maneira:

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

\Acorresponde ao início da string, \zao final da string ( ^e $também corresponde ao início / fim das linhas em alguns idiomas, como Ruby, ou se certas opções de regex estiverem definidas).

Tim Pietzcker
fonte
38
+1 por não considerar o alfabeto inglês como o único alfabeto
srcspider
7
+1, o mesmo que acima. O inglês não é o único alfabeto e muitas pessoas escrevem seu nome usando caracteres não-ascii para expressá-lo corretamente.
Ben Barkay
22

Isso corresponderá a um ou mais caracteres alfabéticos:

/^[a-z]+$/

Você pode fazer distinção entre maiúsculas e minúsculas usando:

/^[a-z]+$/i

ou:

/^[a-zA-Z]+$/
stevecomrie
fonte
Isso corresponderá apenas a caracteres latinos.
precisa saber é o seguinte
13

No Ruby e em outros idiomas que suportam classes de caracteres POSIX em expressões entre colchetes, você pode fazer simplesmente:

/\A[[:alpha:]]+\z/i

Isso corresponderá aos caracteres alfabéticos em todos os idiomas do alfabeto Unicode. Mole-mole.

Mais informações: http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html

jshkol
fonte
1
E para obter tudo, menos os caracteres (que não foram documentados) usam [^[:alpha]].
spyle 25/09
6

[a-zA-Z] deve fazer isso muito bem.

Você pode fazer referência à folha de dicas .

Frazell Thomas
fonte
2
sim, mas gostaria também se minha corda continha um caractere não palavra seria ainda corresponder
Steffan Harris