Как написать регулярное выражение, которое соответствует только буквам?
Используйте набор символов: [a-zA-Z]
соответствует одной букве из A-Z в нижнем регистре и в верхнем регистре. [a-zA-Z]+
соответствует одной или нескольким буквам, а ^[a-zA-Z]+$
соответствует только строкам, которые состоят только из одной или нескольких букв (^
и $
отмечают начало и конец строки соответственно).
Если вы хотите совместить другие буквы, чем A-Z, вы можете добавить их в набор символов: [a-zA-ZäöüßÄÖÜ]
. Или вы используете предопределенные классы символов, такие как Свойство символов Unicode class \p{L}
, которое описывает символы Unicode, которые являются буквами.
\p{L}
соответствует любому, что является буквой Unicode, если вас интересуют алфавиты за пределами латинского
\p
как «печатный символ».
В зависимости от вашего значения "символ":
[A-Za-z]
- все буквы (в верхнем и нижнем регистре)
[^0-9]
- все символы без цифр
Ближайшая доступная опция
[\u\l]+
который соответствует последовательности прописных и строчных букв. Однако он не поддерживается всеми редакторами/языками, поэтому, вероятно, безопаснее использовать
[a-zA-Z]+
как указывают другие пользователи.
/[a-zA-Z]+/
Супер простой пример. Регулярные выражения чрезвычайно легко найти в Интернете.
Для PHP последующие будут работать отлично
'/^[a-zA-Z]+$/'
Регулярное выражение, которое несколько человек написало как "/^ [a-zA-Z] $/i", неверно, потому что в последнем случае они упомянули /i, который не зависит от регистра и после сопоставления в первый раз он вернется назад. Вместо /i просто используйте /g, который для глобального, и вам также не нужно помещать ^ $ для начала и окончания.
/[a-zA-Z]+/g
Просто используйте \w
или [:alpha:]
. Это escape-последовательности, которые соответствуют только символам, которые могут появляться в словах.
\w
не может быть хорошим решением во всех случаях. По крайней мере, в PCRE \w
может совпадать и с другими символами. Цитируя руководство по PHP : « слово» - это любая буква или цифра или символ подчеркивания, то есть любой символ, который может быть частью «слова» Perl. Определение букв и цифр контролируется таблицами символов PCRE, и может отличаться, если имеет место специфичное для локали сопоставление. Например, в локали "fr" (французский) некоторые коды символов, превышающие 128, используются для букв с ударением, и они совпадают с \ w. "
Вы использовали бы
/[a-z]/gi
[] - проверяет любые символы между заданными входами
a-z --- охватывает весь алфавит
g ----- глобально по всей строке
i ----- получение верхнего и нижнего регистра
Если вы имеете в виду любые буквы в любой кодировке символов, то хорошим подходом может быть удаление небуксов, таких как пробелы \s
, цифры \d
и другие специальные символы, такие как:
[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]
Или используйте отрицание вышеуказанного отрицания, чтобы напрямую описывать любые буквы:
\S \D and [^ ..special chars..]
Плюсы:
Минусы:
Вы можете попробовать это регулярное выражение: [^\W\d_]
или [a-zA-Z]
.
[^\W|\d]
[^\W|\d]
означает не \W
и не |
и не \d
. Это имеет тот же чистый эффект, так как |
является частью \W
но |
не работает так, как вы думаете. Даже тогда это означает, что он принимает символ _
. Вы, вероятно, ищете [^\W\d_]
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
Pattern pattern = Pattern.compile("^[a-zA-Z]+$");
if (pattern.matcher("a").find()) {
...do something ......
}
String string= "abcdef";
if(string.match("^[a-zA-Z]+$$")){
System.out.println("string only contains letters");
}
ŹŻŚĄ
characters
? ASCII? Кандзи? Iso-XXXX-X? UTF8?regex
? Perl? Emacs? Grep?