Регулярное выражение, чтобы разрешить один пробел между словами - PullRequest
0 голосов
/ 11 июня 2018

Это регулярное выражение для полного имени пользователя, поэтому я хочу разрешить пробелы.Кроме того, я использую следующее регулярное выражение, чтобы разрешить только символы UTF-8:

/^(\p{L}+)$/u

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

/^(\p{L} +)$/u

Ответы [ 3 ]

0 голосов

В соответствии с вашим регулярным выражением, которое принимает полные имена и в режиме 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]] означает класс символоввсех слов, апострофов, дефисов и периодов, но не цифр.
0 голосов
/ 11 июня 2018

Другой подход, который допускает только один пробел между буквами (шаблон pcre / php).

/^(?>\pL+ ?\b)+$/u
  • \pL+ соответствует одной или нескольким буквам Unicode
  • ? один пробел необязательный
  • граница слова \b требует, чтобы количественно группа заканчивалась буквой.
  • более совместим с другими разновидностями регулярных выражений, такими как Ruby или .NET: ^(?:\p{L}+ ?\b)+$

См. Демонстрацию в regex101 для проверки .

(для этого шаблона требуетсястрока, начинающаяся с буквы и заканчивающаяся буквой)

0 голосов
/ 11 июня 2018

Это регулярное выражение, по моему мнению, подходит для полного имени пользователя,

/^([a-zA-Z' ]+)$/

Я не думаю, что вы должны ставить регулярное выражение для имени вообще, потому что сопоставление всех имен во всем мире с иностраннымисимволы и разные языки - это слишком сложная работа с небольшим количеством преимуществ.

Попытка включить иностранные символы

/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.']+$/u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...