Какое у вас определение characters? ASCII? Кандзи? Iso-XXXX-X? UTF8?
Иво Ветцель
45
Какое у вас определение regex? Perl? Emacs? Grep?
Паскаль Куок
4
Учитывая, что вопрос на английском языке, на английском сайте, будет справедливо предположить, что вопрос касается символов на английском языке.
vaer-k
1
Я заметил, что \ p {L} для буквы и / u флаг для Unicode соответствует любой букве в моем регулярном выражении, т.е./\p{L}+/u
MaxZoom
4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. Это правда. Как мы все знаем, носители английского НИКОГДА не локализуют свои приложения!
Алекс
Ответы:
393
Используйте набор символов: [a-zA-Z]соответствует одной букве от A до Z в нижнем и верхнем регистре. [a-zA-Z]+соответствует одной или нескольким буквам и ^[a-zA-Z]+$соответствует только строкам, которые состоят только из одной или нескольких букв ( ^и $отмечают начало и конец строки соответственно).
Если вы хотите , чтобы соответствовать другим , чем буквы A-Z, вы можете добавить их к набору символов: [a-zA-ZäöüßÄÖÜ]. Или вы используете предопределенные классы символов, такие как класс свойств символов Unicode,\p{L} который описывает символы Unicode, которые являются буквами.
Это очень ASCII-ориентированное решение. Это сломает практически любой неанглоязычный текст.
Йоахим Зауэр
7
@Joachim Sauer: Это скорее сломает языки, использующие нелатинские символы.
Гамбо
15
Уже разбивает 90% немецкого текста, даже не упоминает французский или испанский. Итальянский может все еще очень хорошо, хотя.
Иво Ветцель
9
это зависит от того, какое определение «латинского символа» вы выберете. J, U, Ö, Ä можно утверждать, что это латинские символы или нет, в зависимости от вашего определения. Но все они используются в языках, которые используют «латинский алфавит» для письма.
Йоахим Зауэр
9
\ p {L} соответствует всем акцентам седла умлаутов и т. д., так что вы должны пойти с этим.
Раду Симионеску
198
\p{L} соответствует любому, что является буквой Unicode, если вы заинтересованы в алфавитах помимо латинского
не во всех вкусах регулярных выражений. Например, регулярные выражения vim рассматриваются \pкак «печатные символы».
Филипп Поттер
3
на этой странице предлагается поддержка только регулярных выражений java, .net, perl, jgsoft, XML и XPath \ p {L}. Но основные упущения: python и ruby (хотя в python есть модуль regex).
Филипп Поттер
6
@Philip Potter: Ruby поддерживает свойства символов Unicode, используя тот же синтаксис.
Йорг Миттаг
6
Я думаю, что это должно \p{L}\p{M}*+охватывать буквы, состоящие из нескольких кодовых точек, например буквы, за которыми следуют знаки ударения. Согласно регулярным
выражениям.info
с питоном 3 это выдает ошибкуbad escape \p at position 0
Я имел в виду буквы. Похоже, это не работает. preg_match ('/ [a-zA-Z] + /', $ name);
Nike
[A-Za-z] - это просто объявление символов, которые вы можете использовать. Вам все еще нужно указать, сколько раз нужно использовать это объявление: [A-Za-z] {1,2} (для соответствия 1 или 2 буквам) или [A-Za-z] {1, *} (для соответствия 1 или более букв)
@phuclv: Действительно, но это зависит от кодировки, и кодировка является частью настроек программы (либо конфигурации по умолчанию, либо конфигурации, объявленной в файле конфигурации программы). Когда я работал на разных языках, я обычно сохранял это в константе, в файле конфигурации.
Каталина Чирку
1
Кодировка @CatalinaChircu здесь абсолютно неактуальна. Кодирование - это способ кодировать кодовую точку в двоичном наборе символов, например, UTF-8 - это кодировка для Unicode. Письма OTOH зависят от языка, и если кто-то говорит, что [A-Za-z]это буквы, то необходимо указать используемый язык
phuclv
32
Ближайший доступный вариант
[\u\l]+
которая соответствует последовательности прописных и строчных букв. Тем не менее, он поддерживается не всеми редакторами / языками, поэтому его, вероятно, безопаснее использовать
Регулярное выражение, которое немногие люди написали как «/ ^ [a-zA-Z] $ / i», неверно, потому что в последнем случае они упомянули / i, что не учитывает регистр, и после сопоставления в первый раз оно вернется обратно. Вместо / я просто использую / g, который предназначен для глобального, и вам также не нужно ставить ^ $ для начала и окончания.
/[a-zA-Z]+/g
[a-z _] + соответствует одному символу, представленному в списке ниже
Квантификатор: + От одного до неограниченного количества раз, столько раз, сколько возможно, отдача по мере необходимости
az один символ в диапазоне между a и z (чувствителен к регистру)
AZ один символ в диапазоне между A и Z (с учетом регистра)
Модификатор g : глобальный. Все матчи (не возвращаются в первом матче)
\wне может быть хорошим решением во всех случаях. По крайней мере, в PCRE, \wможет соответствовать другим персонажам. Цитируя руководство по PHP : « слово» - это любая буква или цифра или символ подчеркивания, то есть любой символ, который может быть частью «слова» Perl. Определение букв и цифр контролируется таблицами символов PCRE, и может отличаться, если имеет место специфичное для локали сопоставление. Например, в локали "fr" (французский) некоторые коды символов, превышающие 128, используются для букв с ударением, и они совпадают с \ w. ".
Амаль Мурали
слова включают в себя другие символы из букв
V-SHY
2
\wозначает совпадение букв и цифр
Евгений Коньков
4
Если вы имеете в виду любые буквы в любой кодировке символов, то хорошим подходом может быть удаление не букв, таких как пробелы \s, цифры \dи другие специальные символы, такие как:
[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]
Или используйте отрицание вышеупомянутого отрицания, чтобы напрямую описать любые буквы:
\S \D and[^..special chars..]
Плюсы:
Работает со всеми вкусами регулярных выражений.
Легко написать, иногда сэкономить много времени.
Минусы:
Длинный, иногда не идеальный, но кодировка символов также может быть нарушена.
[^\W|\d]значит нет \Wи нет |и нет \d. Он имеет тот же чистый эффект, поскольку |является частью, \Wно |не работает так, как вы думаете. Даже тогда это означает, что он принимает _характер. Вы, вероятно, ищете[^\W\d_]
OGHaza
Я согласен с вами, он принимает _. Но «НЕ» |равно «И», поэтому [^\W|\d]означает: «НЕ \WИ НЕ»\d
Motlab
12
[^ab]значит нет aи нет b. [^a|b]значит неa и нет |и нет b. Чтобы дать второй пример [a|b|c|d]точно так же , как и [abcd|||]который является точно такой же , как [abcd|]- все из которых приравнивают к является буквенный символ, не является оператором ИЛИ. Оператор OR подразумевается между каждым символом в классе символов, что означает, что вы хотите, чтобы класс принял символ (pipe). ([a]|[b]|[c]|[d]|[|])|||
О.Г.Газа
1
В последнее время я использовал этот шаблон в своих формах для проверки имен людей, содержащих буквы, пробелы и специальные символы, такие как знаки ударения.
characters
? ASCII? Кандзи? Iso-XXXX-X? UTF8?regex
? Perl? Emacs? Grep?/\p{L}+/u
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English.
Это правда. Как мы все знаем, носители английского НИКОГДА не локализуют свои приложения!Ответы:
Используйте набор символов:
[a-zA-Z]
соответствует одной букве от A до Z в нижнем и верхнем регистре.[a-zA-Z]+
соответствует одной или нескольким буквам и^[a-zA-Z]+$
соответствует только строкам, которые состоят только из одной или нескольких букв (^
и$
отмечают начало и конец строки соответственно).Если вы хотите , чтобы соответствовать другим , чем буквы A-Z, вы можете добавить их к набору символов:
[a-zA-ZäöüßÄÖÜ]
. Или вы используете предопределенные классы символов, такие как класс свойств символов Unicode,\p{L}
который описывает символы Unicode, которые являются буквами.источник
\p{L}
соответствует любому, что является буквой Unicode, если вы заинтересованы в алфавитах помимо латинскогоисточник
\p
как «печатные символы».\p{L}\p{M}*+
охватывать буквы, состоящие из нескольких кодовых точек, например буквы, за которыми следуют знаки ударения. Согласно регулярнымbad escape \p at position 0
В зависимости от вашего значения «характер»:
источник
[A-Za-z]
это буквы, то необходимо указать используемый языкБлижайший доступный вариант
которая соответствует последовательности прописных и строчных букв. Тем не менее, он поддерживается не всеми редакторами / языками, поэтому его, вероятно, безопаснее использовать
как предлагают другие пользователи
источник
Вы бы использовали
[] - проверяет наличие любых символов между заданными входами
аз --- охватывает весь алфавит
г ----- глобально на протяжении всей строки
я ----- получаю прописные и строчные буквы
источник
Регулярное выражение, которое немногие люди написали как «/ ^ [a-zA-Z] $ / i», неверно, потому что в последнем случае они упомянули / i, что не учитывает регистр, и после сопоставления в первый раз оно вернется обратно. Вместо / я просто использую / g, который предназначен для глобального, и вам также не нужно ставить ^ $ для начала и окончания.
источник
Ява:
источник
ŹŻŚĄ
Супер простой пример. Регулярные выражения очень легко найти в Интернете.
http://www.regular-expressions.info/reference.html
источник
Для PHP следующее будет работать нормально
источник
Используйте группы персонажей
Соответствует любому символу, кроме цифр 0-9
Смотрите пример здесь
источник
Просто используйте
\w
или[:alpha:]
. Это escape-последовательности, которые соответствуют только символам, которые могут появляться в словах.источник
\w
не может быть хорошим решением во всех случаях. По крайней мере, в PCRE,\w
может соответствовать другим персонажам. Цитируя руководство по PHP : « слово» - это любая буква или цифра или символ подчеркивания, то есть любой символ, который может быть частью «слова» Perl. Определение букв и цифр контролируется таблицами символов PCRE, и может отличаться, если имеет место специфичное для локали сопоставление. Например, в локали "fr" (французский) некоторые коды символов, превышающие 128, используются для букв с ударением, и они совпадают с \ w. ".\w
означает совпадение букв и цифрЕсли вы имеете в виду любые буквы в любой кодировке символов, то хорошим подходом может быть удаление не букв, таких как пробелы
\s
, цифры\d
и другие специальные символы, такие как:Или используйте отрицание вышеупомянутого отрицания, чтобы напрямую описать любые буквы:
Плюсы:
Минусы:
источник
Вы можете попробовать это регулярное выражение:
[^\W\d_]
или[a-zA-Z]
.источник
[^\W|\d]
значит, что[^\W|\d]
значит нет\W
и нет|
и нет\d
. Он имеет тот же чистый эффект, поскольку|
является частью,\W
но|
не работает так, как вы думаете. Даже тогда это означает, что он принимает_
характер. Вы, вероятно, ищете[^\W\d_]
_
. Но «НЕ»|
равно «И», поэтому[^\W|\d]
означает: «НЕ\W
И НЕ»\d
[^ab]
значит нетa
и нетb
.[^a|b]
значит неa
и нет|
и нетb
. Чтобы дать второй пример[a|b|c|d]
точно так же , как и[abcd|||]
который является точно такой же , как[abcd|]
- все из которых приравнивают к является буквенный символ, не является оператором ИЛИ. Оператор OR подразумевается между каждым символом в классе символов, что означает, что вы хотите, чтобы класс принял символ (pipe).([a]|[b]|[c]|[d]|[|])
|
|
|
В последнее время я использовал этот шаблон в своих формах для проверки имен людей, содержащих буквы, пробелы и специальные символы, такие как знаки ударения.
источник
A-z
соответствует больше, чем просто буквы, а такжеÀ-ú
pattern = / [a-zA-Z] /
ставит "[a-zA-Z]: # {pattern.match (" mine flower ")}" OK
ставит "[a-zA-Z]: # {pattern.match (" 456 ")}"
ставит "[a-zA-Z]: # {pattern.match (" ")}"
ставит "[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"
ставит "[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" ОК
источник
источник