В соответствии с вашим регулярным выражением, которое принимает полные имена и в режиме unicode (u), попробуйте рассмотреть это регулярное выражение (совместимо со стандартными регулярными выражениями POSIX, включая регулярные выражения Python, JS и PHP):
/^[\p{L}'\-\.]+( [\p{L}'\-\.]+)*$/u
Следовательно, это регулярное выражение будет проанализировано с помощью:
- Любые буквенные символы (включая апострофы, дефисы и точки):
[\p{L}'\-\.]+
- И каждое дополнительное имя содержит:
- Ровно один пробел:
- За которыми следуют соответствующие буквенные символы:
[\p{L}'\-\.]+
- Все сгруппированы вместе,формирование
( [\p{L}'\-\.]+)*
Это регулярное выражение поддерживает одно- и многословные имена (также как полное имя пользователя).Если вы хотите включить больше символов, измените [\p{L}'\-\.]
, добавив больше символов (особенно, когда требуются символы с акцентом, такие как ñ
. В настоящее время он включает буквенные символы в различных сценариях, а также апостроф и дефис.
Он принимает такие имена в движке PHP или JS, вы можете протестировать его для других движков, показывая, что некоторые движки требуют, чтобы вы вручную добавили эти символы или изменили его на \w
(Тест можно проверить здесь ):
Johnny Appleseed
Martin Harding-Rolls
Daniel O'Brian
IJsbrand van 't IJsselstein
Euclid
Jalapeño Arriba
(вам может потребоваться добавить ñ в список) S.L.IJ.M.B.A.L P.U.I.S.T
Paul Erdős
(вам может понадобиться добавить буквы венгерского акцентированного в список) на русском
- 李富 (символы китайского языка / CJK составляют очень большой раздел в Unicode)
В настоящее время эти имена не принимаются:
Spaceman Superman
(пробел перед именем) OMG
(пробел после имени) Johnny Appleseed
(два пробела) -- '+
(недопустимые символы) Mulliganaceous2 Shogun
(цифры, \p{L}
только) Pokemon Porygon2
(цифры \p{L}
только)
Относительно совместимости и экранирования \w
(Правка: специально запрашивающий хочет исключить имена с цифрами)
В случае \p{L}
не работает, вы можете попробовать /^[\w'\-\.]+( [\w'\-\.]+)*$/u
.
\w
соответствует всем символам слова ASCII , включая цифры и подчеркивание: [A-Za-z0-9_]
- Существует несоответствие между включением акцентированных символов и символов из других сценариев.
- Некоторые движки регулярных выражений включают символы CJK, в то время как другие включают только символы слова ASCII.
- Если специальные символы исключены, их может потребоваться включить вручную.
- Вы также можетевключить диапазон символов Unicode:
- Чтобы включить китайские символы, используйте
[\u4E00-\u9FFF]
- В некоторых движках также может использоваться пересечение:
[\w'\-\.&&[\D]]
означает класс символоввсех слов, апострофов, дефисов и периодов, но не цифр.