регулярное выражение для полного имени с приветствием - PullRequest
1 голос
/ 03 ноября 2010

Я хочу регулярное выражение для полного имени с приветствием. Может кто-нибудь, пожалуйста, помогите мне.

^[A-Za-z] ([A-Za-z] (\\s|\\.|_)?)+[a-zA-Z]*$

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

Ответы [ 3 ]

6 голосов
/ 03 ноября 2010

Правило первое: никогда не пытайтесь применять правила к именам людей. всегда будет кем-то, кого вы исключаете, просто потому, что его имя не соответствует вашему ожиданию.

А как насчет людей, которые не имеют (или не хотят) приветствия? Или те, у кого их больше одного? «Профессор сэр» - это вполне допустимая комбинация в Великобритании, а в Германии люди с несколькими степенями обычно называют себя «Доктор Доктор» или что-то подобное.

А потом есть настоящие имена. Ваше регулярное выражение потерпит неудачу даже для относительно распространенных имен в западном стиле, таких как «Мэри-Джейн О'Брайен» или «Андре ван ден Берг», не говоря уже о более необычных случаях.

Короче говоря, практически невозможно точно проверить поле имени.

Вот ссылка на страницу, которая описывает некоторые очевидные (и не очень очевидные) вещи, которые люди пытаются проверить по именам, что может сбить вас с толку:

http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/

(я уже публиковал подобный комментарий здесь: Как «проверить» человеческие имена в CakePHP? )

3 голосов
/ 03 ноября 2010

Если вы настаиваете на этом с помощью регулярного выражения, добавьте (Dr|Mrs?|Ms)\. к шаблону.Будет соответствовать:

  • Dr.
  • Mr.
  • Mrs.
  • Ms.

Т.е. (учитывая, что вы удовлетворены остальными регулярными выражениями - взяты непосредственно из вопроса.)

^(Dr|Mrs?|Ms)\. [A-Za-z] ([A-Za-z] (\s|\.|_)?)+[a-zA-Z]*$

Однако этого будет не достаточно для работы с сэром.Найджел Оливер Сент-Джон-Моллюск III., OBE (спасибо, @Tim Pietzcker).


РЕДАКТИРОВАТЬ
(Dr|Mr?s?)\. было неправильно, извините.Это будет соответствовать M. тоже.Спасибо, @ tchrist.

2 голосов
/ 03 ноября 2010

Вы можете использовать слегка модифицированную версию http://regexlib.com/REDetails.aspx?regexp_id=2502

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...