Регулярное выражение для соответствия только буквенным символам


157

Мне было интересно, смогу ли я получить регулярное выражение, которое будет соответствовать строке, содержащей только буквенные символы, и только это.


2
Что-то вроде / ^ [a-zA-Z] + $ / должно работать.
Джулиан Го

10
Является àли буквенный символ по вашему определению? Какой язык вы используете?
Тим Пицкер

2
должна совпадать пустая строка?
ysth

Нету пустая строка не должна совпадать
Штеффан Харрис

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

Ответы:


186

Вы можете использовать любой из этих 2 вариантов:

/^[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» и «от» до «z».
Ли

То, что я действительно хотел, это способ сопоставления моей строки только тогда, когда она имеет буквенные символы, если она имеет не алфавитный символ, она не должна совпадать.
Штеффан Харрис

7
@ Ли: не некоторые. Все они. Это регулярное выражение неверно в своем текущем состоянии.
Тим Пицкер

7
\w is shorthand for A-Za-z- не совсем, \wэто сокращение от[a-zA-Z0-9_]
анубхава

1
Хороший вопрос @ jpmc26. Я отредактировал свой ответ, чтобы удалить мою первоначальную ошибку.
анубхава

55

Если вам нужно включить не-ASCII буквенные символы, и если ваш регулярный код поддерживает Unicode, то

\A\pL+\z

будет правильным регулярным выражением.

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

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

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


38
+1 за то, что английский алфавит не считается единственным алфавитом
srcspider

7
+1, как и выше. английский не единственный алфавит, и многие люди пишут свое имя, используя не-ascii символы, чтобы выразить его правильно.
Бен Баркай

22

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

/^[a-z]+$/

Вы можете сделать это без учета регистра, используя:

/^[a-z]+$/i

или:

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

Это будет соответствовать только латинским символам.
цитируетBro

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]].
spyle

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.