Wyrażenie regularne, aby dopasować tylko znaki alfabetu


157

Zastanawiałem się, czy uda mi się uzyskać wyrażenie regularne, które będzie pasowało do łańcucha zawierającego tylko znaki alfabetu i tylko to.


2
Coś w rodzaju / ^ [a-zA-Z] + $ / powinno działać.
Julian Go

10
Czy àznak alfabetu odpowiada Twojej definicji? Jakiego języka używasz?
Tim Pietzcker

2
czy powinien pasować pusty ciąg?
ysth

nie, pusty ciąg nie powinien pasować
Steffan Harris

Jedna ważna uwaga: nie poleciłeś języka ani narzędzia, w którym chcesz użyć wyrażenia regularnego, o które prosisz. Chociaż zasady wyrażeń regularnych są ogólnie takie same, składnia nie jest wszędzie jednakowa. Powinieneś odnieść się, gdzie chcesz go użyć.
sergiol

Odpowiedzi:


186

Możesz użyć dowolnego z tych 2 wariantów:

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

aby dopasować wejściowy ciąg alfabetów ASCII.

  • [A-Za-z] dopasuje wszystkie alfabety (zarówno małe, jak i duże).
  • ^i $upewni się, że nic poza tymi alfabetami nie zostanie dopasowane.

Kod:

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

Wynik:

array(0) {
}

Przypadek testowy dotyczy komentarza OP, który chce dopasować tylko wtedy, gdy w danych wejściowych występuje 1 lub więcej alfabetów. Jak widać w przypadku testowym, dopasowanie nie powiodło się, ponieważ znajdował się ^w ciągu wejściowym abcAbc^Xyz.

Uwaga: należy pamiętać, że powyższa odpowiedź jest zgodna tylko z alfabetami ASCII i nie obejmuje znaków Unicode. Jeśli chcesz dopasować litery Unicode, użyj:

/^\p{L}+$/u

Tutaj \p{L}pasuje do każdego rodzaju listu z dowolnego języka


22
W niektórych dialektach [Az] będzie pasować do wartości interpunkcyjnych ASCII występujących między 'Z' i 'a', w szczególności '[', '\', ']', '^', '-' i '`', jak a także od „A” do „Z” i od „a” do „z”.
Lee

Tak naprawdę chciałem dopasować mój ciąg tylko wtedy, gdy ma znaki alfabetu, jeśli ma znak niealfabetyczny, nie powinien pasować.
Steffan Harris

7
@Lee: Nie niektóre. Wszyscy. To wyrażenie regularne jest nieprawidłowe w obecnym stanie.
Tim Pietzcker

7
\w is shorthand for A-Za-z- nie bardzo, \wjest skrótem od[a-zA-Z0-9_]
anubhava

1
Słuszna uwaga @ jpmc26. Zmieniłem odpowiedź, aby usunąć pierwotny błąd.
anubhava,

55

Jeśli potrzebujesz dołączyć znaki alfabetu spoza ASCII, a Twój typ wyrażenia regularnego obsługuje Unicode, to

\A\pL+\z

byłoby poprawnym wyrażeniem regularnym.

Niektóre aparaty regex nie obsługują tej składni Unicode, ale pozwalają \wskrótom alfanumerycznym na dopasowanie również znaków spoza ASCII. W takim przypadku możesz uzyskać wszystkie alfabety, odejmując cyfry i podkreślenia w \wten sposób:

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

\Adopasowuje na początku łańcucha, \zna końcu łańcucha ( ^a $także dopasowuje na początku / końcu linii w niektórych językach, takich jak Ruby, lub jeśli są ustawione określone opcje wyrażeń regularnych).


38
+1 za nie traktowanie alfabetu angielskiego jako jedynego alfabetu
srcspider

7
+1, tak samo jak powyżej. angielski nie jest jedynym alfabetem i wiele osób pisze swoje imię używając znaków innych niż ASCII, aby poprawnie je wyrazić.
Ben Barkay

22

Dopasuje jeden lub więcej znaków alfabetu:

/^[a-z]+$/

Możesz sprawić, by wielkość liter nie była rozróżniana, używając:

/^[a-z]+$/i

lub:

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

Dopasuje tylko znaki łacińskie.
cytuje Brat


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.