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

240

Как написать регулярное выражение, которое соответствует только буквам?

  • 56
    Какое у вас определение characters ? ASCII? Кандзи? Iso-XXXX-X? UTF8?
  • 41
    Какое у вас определение regex ? Perl? Emacs? Grep?
Теги:

15 ответов

257

Используйте набор символов: [a-zA-Z] соответствует одной букве из A-Z в нижнем регистре и в верхнем регистре. [a-zA-Z]+ соответствует одной или нескольким буквам, а ^[a-zA-Z]+$ соответствует только строкам, которые состоят только из одной или нескольких букв (^ и $ отмечают начало и конец строки соответственно).

Если вы хотите совместить другие буквы, чем A-Z, вы можете добавить их в набор символов: [a-zA-ZäöüßÄÖÜ]. Или вы используете предопределенные классы символов, такие как Свойство символов Unicode class \p{L}, которое описывает символы Unicode, которые являются буквами.

  • 84
    Это очень ASCII-ориентированное решение. Это сломает практически любой неанглоязычный текст.
  • 7
    @Joachim Sauer: Это скорее сломает языки, использующие нелатинские символы.
Показать ещё 5 комментариев
114

\p{L} соответствует любому, что является буквой Unicode, если вас интересуют алфавиты за пределами латинского

  • 1
    не во всех вкусах регулярных выражений. Например, регулярные выражения vim рассматривают \p как «печатный символ».
  • 3
    Ну, в любом движке регулярных выражений, который поддерживает регулярные выражения Unicode, то
Показать ещё 4 комментария
32

В зависимости от вашего значения "символ":

[A-Za-z] - все буквы (в верхнем и нижнем регистре)

[^0-9] - все символы без цифр

  • 0
    Я имел в виду буквы. Это, кажется, не работает, хотя. preg_match ('/ [a-zA-Z] + /', $ name);
  • 0
    [A-Za-z] - это просто объявление символов, которые вы можете использовать. Вам все еще нужно указать, сколько раз нужно использовать это объявление: [A-Za-z] {1,2} (для соответствия 1 или 2 буквам) или [A-Za-z] {1, *} (для соответствия 1 или более букв)
Показать ещё 1 комментарий
22

Ближайшая доступная опция

[\u\l]+

который соответствует последовательности прописных и строчных букв. Однако он не поддерживается всеми редакторами/языками, поэтому, вероятно, безопаснее использовать

[a-zA-Z]+

как указывают другие пользователи.

  • 0
    Не будет соответствовать каким-либо специальным символам.
11
/[a-zA-Z]+/

Супер простой пример. Регулярные выражения чрезвычайно легко найти в Интернете.

http://www.regular-expressions.info/reference.html

10

Для PHP последующие будут работать отлично

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

Регулярное выражение, которое несколько человек написало как "/^ [a-zA-Z] $/i", неверно, потому что в последнем случае они упомянули /i, который не зависит от регистра и после сопоставления в первый раз он вернется назад. Вместо /i просто используйте /g, который для глобального, и вам также не нужно помещать ^ $ для начала и окончания.

/[a-zA-Z]+/g
  • [a-z _] + соответствует одному символу, присутствующему в списке ниже
  • Квантификатор: + Между одним и неограниченным временем, как можно больше раз, отдавая при необходимости
  • a-z один символ в диапазоне между a и z (чувствительный к регистру)
  • A-Z один символ в диапазоне между A и Z (с учетом регистра)
  • g: глобальный. Все совпадения (не возвращаются в первом матче)
5

Использование групп символов

\D

Соответствует любому символу, кроме цифр 0-9

^\D+$

См. пример здесь

  • 2
    Это также будет соответствовать пробелам, символам и т. Д., Что, по-видимому, не соответствует задаче.
  • 0
    Weird. Просто понизил это, и это не я!
4

Просто используйте \w или [:alpha:]. Это escape-последовательности, которые соответствуют только символам, которые могут появляться в словах.

  • 6
    \w не может быть хорошим решением во всех случаях. По крайней мере, в PCRE \w может совпадать и с другими символами. Цитируя руководство по PHP : « слово» - это любая буква или цифра или символ подчеркивания, то есть любой символ, который может быть частью «слова» Perl. Определение букв и цифр контролируется таблицами символов PCRE, и может отличаться, если имеет место специфичное для локали сопоставление. Например, в локали "fr" (французский) некоторые коды символов, превышающие 128, используются для букв с ударением, и они совпадают с \ w. "
  • 0
    слова включают другие символы из букв
Показать ещё 1 комментарий
3

Вы использовали бы

/[a-z]/gi

[] - проверяет любые символы между заданными входами

a-z --- охватывает весь алфавит

g ----- глобально по всей строке

i ----- получение верхнего и нижнего регистра

2

Если вы имеете в виду любые буквы в любой кодировке символов, то хорошим подходом может быть удаление небуксов, таких как пробелы \s, цифры \d и другие специальные символы, такие как:

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]

Или используйте отрицание вышеуказанного отрицания, чтобы напрямую описывать любые буквы:

\S \D and [^  ..special chars..]

Плюсы:

  • Работает со всеми ароматами регулярных выражений.
  • Легко писать, иногда сэкономить много времени.

Минусы:

  • Длинные, иногда не совершенные, но кодировка символов также может быть нарушена.
1

Вы можете попробовать это регулярное выражение: [^\W\d_] или [a-zA-Z].

  • 0
    Это не то, что означает [^\W|\d]
  • 0
    [^\W|\d] означает не \W и не | и не \d . Это имеет тот же чистый эффект, так как | является частью \W но | не работает так, как вы думаете. Даже тогда это означает, что он принимает символ _ . Вы, вероятно, ищете [^\W\d_]
Показать ещё 2 комментария
0

pattern =/[a-zA-Z]/

помещает "[a-zA-Z]: # {pattern.match(" my blossom ")}" ОК

помещает "[a-zA-Z]: # {pattern.match(" 456 ")}"

помещает "[a-zA-Z]: # {pattern.match(" ")}"

помещает "[a-zA-Z]: # {pattern.match(" # $% ^ & * ")}"

помещает "[a-zA-Z]: # {pattern.match(" # $% ^ & * A ")}" OK

  • 1
    А что, например, «Отпусти себя»?
-1
Pattern pattern = Pattern.compile("^[a-zA-Z]+$");

if (pattern.matcher("a").find()) {

   ...do something ......
}
-2
String string= "abcdef";

if(string.match("^[a-zA-Z]+$$")){
     System.out.println("string only contains letters");
}
  • 1
    он не включает в себя диакритические знаки, такие как ŹŻŚĄ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню