Регулярне вираження для відповідності лише алфавітним символам


157

Мені було цікаво, чи зможу я отримати регулярний вираз, який буде відповідати рядку, що містить лише алфавітні символи, і лише це.


2
Щось на кшталт / ^ [a-zA-Z] + $ / має працювати.
Julian Go

10
Чи àє алфавітним символом згідно з вашим визначенням? Якою мовою ви користуєтесь?
Тім Піцкер

2
чи має відповідати порожній рядок?
ysth

ні, порожня рядок не повинна відповідати
Стеффан Харріс

Одне важливе зауваження: ви не вказали мову чи інструмент, де хочете використовувати регулярний вираз. Хоча принципи регулярних виразів однакові універсально, синтаксис не скрізь однаковий. Вам слід вказати, де ви хочете його використовувати.
сергіол

Відповіді:


186

Ви можете використовувати будь-який із цих двох варіантів:

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

відповідати вхідному рядку алфавітів ASCII.

  • [A-Za-z] відповідатиме всім алфавітам (і малі, і великі).
  • ^і $переконається, що нічого, крім цих алфавітів, не буде відповідати.

Код:

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

Вихід:

array(0) {
}

Тестовий випадок - це коментар ОП, що він хоче відповідати лише у тому випадку, якщо на вході є 1 або більше алфавітів. Як ви бачите в тестовому випадку, що збіги не вдалися, оскільки вони були ^у вхідному рядку abcAbc^Xyz.

Примітка. Зверніть увагу: вищевказана відповідь відповідає лише алфавітам ASCII і не відповідає символам Unicode. Якщо ви хочете відповідати літерам Unicode, тоді використовуйте:

/^\p{L}+$/u

Тут \p{L}відповідає будь-який лист з будь-якої мови


22
У деяких діалектах [Az] буде відповідати знакам пунктуації ASCII, що виникають між 'Z' і 'a', зокрема '[', '\', ']', '^', '-' і '' ', як а також "A" через "Z" і "a" через "z".
Лі

Те, що я дійсно хотів, - це відповідати моєму рядку лише тоді, коли він має алфавітні символи, якщо він має не алфавітний символ, він не повинен відповідати.
Steffan Harris

7
@Lee: Не деякі. Усі. Цей регулярний вираз помиляється в його нинішньому стані.
Тім Піцкер

7
\w is shorthand for A-Za-z- Не дуже, \wце скорочення[a-zA-Z0-9_]
anubhava

1
Гарна точка @ jpmc26. Я відредагував свою відповідь, щоб усунути свою первісну помилку.
anubhava

55

Якщо вам потрібно включити алфавітні символи, що не належать до ASCII, і якщо ваш аромат регулярного вибору підтримує Unicode, тоді

\A\pL+\z

було б правильним регулярним виразом.

Деякі двигуни регулярних виразів не підтримують цей синтаксис Unicode, але дозволяють \wбуквено-цифровій стенограмі також відповідати символам, що не належать до ASCII. У такому випадку ви можете отримати всі алфавіти, віднімаючи цифри і підкреслення від \wцього:

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

\Aзбіги на початку рядка, \zв кінці рядка ( ^а $також збігаються на початку / в кінці рядків на деяких мовах, таких як Ruby, або якщо встановлені певні параметри регулярного вираження).


38
+1 за те, що не вважав англійський алфавіт єдиним алфавітом
srcspider

7
+1, те саме, що вище. англійська мова - не єдиний алфавіт, і багато людей пишуть своє ім'я, використовуючи символи, що не належать до асції, щоб правильно їх висловити.
Бен Баркай

22

Це буде відповідати одному або кільком алфавітним символам:

/^[a-z]+$/

Ви можете зробити його нечутливим, використовуючи:

/^[a-z]+$/i

або:

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

Це відповідатиме лише латинським символам.
цитатиБро

13

У Ruby та інших мовах, які підтримують POSIX класи символів у дужках, ви можете просто:

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

Це буде відповідати альфа-знакам у всіх мовах алфавіту Unicode. Простенька.

Більше інформації: http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html


1
І щоб отримати все, крім тих персонажів (які не були задокументовані), використовуйте [^[:alpha]].
шпиль

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.