2016-09-13 5 views
1

Я пытаюсь проверить имя, со следующими правилами:Regex имени проверка (сложная логика)

  1. Case нечувствительных

  2. только буквы, пустое пространство, акцентированные символы.

  3. По крайней мере один пробел следует с некоторой буквой или буквами John D или john Doe или John X Doe

  4. не может иметь несколько пробелов сразу John X Doe

  5. Длина должна быть не менее 5 (с пространством) и в максимум 80

Я придумал (?i)^[a-z]+(?:[\ ]?[a-z]+)*$

https://regex101.com/r/bQ5oO9/1

Некоторые проблемы:

  1. ли проверяющие только 'Имя'

  2. Не проверки длины

  3. не принимает акцентированных символов

+0

об акцентах, проверьте [этот вопрос] (http://stackoverflow.com/questions/20690499/concrete-javascript-regex-for-accented-characters-diacritics) '[A-zÀ-ÿ]' очевидно соответствует всем буквам и буквам с акцентами. –

+0

Я не понимаю, что вы подразумеваете под «Проверяет только« Имя »в моем тестировании, это также соответствует фамилии. –

+0

Чтобы проверить длину, вы можете проверить длину своего матча. Если вы используете проверку атрибутов, вы можете добавить атрибут '[MinLength]' и атрибут '[MaxLength]'. –

ответ

1

Вы можете использовать

^(?=.{5,80}$)\p{L}*(?: \p{L}+)+$ 

См this regex demo (я рекомендую \z, а не $ так \z матчи изменяться конца строки, однако, если вы используете простое пространство в структуре, которая не имеет никакого отношения).

Детали:

  • ^ - начало строки
  • (?=.{5,80}$) - длина должна быть не менее 5 и не более 80 символов все во всех
  • \p{L}* - ноль или более букв (используйте + вместо *, если строка не может начинаться с пробела)
  • (?: \p{L}+)+ - 1 или более последовательности одного пространства и одного или более букв (это соответствует вашему не может иметь несколько пробелов сразу и По крайней мере один пробел следует с некоторой буквой или буквами требования)
  • $ - конец строки ,

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

Если вам также необходимо поддерживать диакритические символы, замените \p{L} на [\p{L}\p{M}].

+1

Спасибо, Виктор работал, отлично! ура – 2Fast4YouBR

Смежные вопросы