Регулярное выражение для имен - PullRequest
23 голосов
/ 08 ноября 2008

Просто начинаю изучать «чудеса» регулярных выражений. Будучи человеком, который учится методом проб и ошибок, я действительно изо всех сил, потому что мои испытания приводят к непропорциональному количеству ошибок ... Мои эксперименты в PHP с использованием ereg ().

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

^[A-Z][a-zA-Z]+$  

Любая длина строки, которая начинается с заглавной буквы и имеет только буквы (заглавные или нет) для остальных. Но там, где я разваливаюсь, приходится сталкиваться с особыми ситуациями, которые могут случиться где угодно.

  • Переносимые имена (Уортингтон-Смайт)
  • Имена с апостофиями (д'Анжело)
  • Имена с пробелами (Ван-дер-Хэмптон) - прописные буквы в середине, которые могут или не могут потребоваться, далеко за пределами моего интереса на данном этапе.
  • Совместные имена (Бен и Джерри)

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

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

Ответы [ 23 ]

0 голосов
/ 03 января 2015

Я придумал этот шаблон RegEx для имен:

/^([a-zA-Z]+[\s'.]?)+\S$/

Это работает. Я думаю, что вы должны использовать это тоже.

Соответствует только именам или строкам, таким как:

Dr. Шакил О'Нил Армстронг Базз-Олдрин

Он не будет соответствовать строкам с 2 или более пробелами, такими как:

Джон Пол

Он не будет соответствовать строкам с конечными пробелами, такими как:

Джон Пол

Текст выше имеет конечный пробел. Попробуйте выделить или выделить текст, чтобы увидеть пробел

Вот что я использую для изучения и создания собственных шаблонов регулярных выражений:

RegExr: Leanr, сборка и тестирование RegEx

0 голосов
/ 11 сентября 2014

я думаю, что "/ ^ [a-zA-Z '] + $ /" недостаточно, это позволит пропустить одну букву, мы можем изменить диапазон, добавив {4,20}, что означает, что диапазон букв равен 4 до 20.

0 голосов
/ 05 июля 2012

Я использовал это, потому что имя может быть частью файла-патча.

//http://support.microsoft.com/kb/177506
foreach(array('/','\\',':','*','?','<','>','|') as $char)
  if(strpos($name,$char)!==false)
      die("Not allowed char: '$char'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...