Я искал и искал, играл и играл с ним, и хотя он не идеален, он может помочь другим попытаться проверить имена и фамилии, которые были представлены как одна переменная.
В моем случае это переменная $ name.
Я использовал следующий код для моего PHP:
if (preg_match('/\b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- \']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -\']{1}[A-Z]{1}[a-z]{1,30}){2,5}/', $name)
# there is no space line break between in the above "if statement", any that
# you notice or perceive are only there for formatting purposes.
#
# pass - successful match - do something
} else {
# fail - unsuccessful match - do something
Я сам изучаю RegEx, но у меня есть объяснение кода, предоставленного приятелем RegEx.
Вот оно:
Утверждение позиции на границе слова «\ b»
Сопоставьте приведенное ниже регулярное выражение и запишите его соответствие в номер обратной ссылки 1
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30}) {2,5} »
От 2 до 5 раз, столько раз, сколько возможно, отдача по мере необходимости (жадный) «{2,5}»
* НУЖНА НЕКОТОРАЯ ПОМОЩЬ ЗДЕСЬ С ПОНИМАНИЕМ РАДИФИКАЦИЙ НАСТОЯЩЕГО ПРИМЕЧАНИЕ *
Примечание: я повторил саму группу захвата. Группа будет захватывать только последнюю итерацию. Поместите группу захвата вокруг повторяющейся группы, чтобы захватить все итерации. «{2,5}»
Соответствует любому регулярному выражению, указанному ниже (попытка следующей альтернативы, только если это не получится) «[A-Z] {1} [a-z] {1,30} [-] {0,1}»
Соответствует одному символу в диапазоне между «A» и «Z» «[A-Z] {1}»
Ровно 1 раз «{1}»
Соответствует одному символу в диапазоне между «a» и «z» «[a-z] {1,30}»
От одного до 30 раз, столько раз, сколько возможно, отдача по мере необходимости (жадный) «{1,30}»
Соответствует одному символу, присутствующему в списке «-» «[-] {0,1}»
От нуля до одного раза, столько раз, сколько возможно, возвращая по мере необходимости (жадный) «{0,1}»
Или соответствует регулярному выражению с номером 2, приведенному ниже (попытка использовать следующую альтернативу, только если эта попытка не удалась) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1, 30} [-] {0,1} »
Соответствует одному символу в диапазоне между «A» и «Z» «[A-Z] {1}»
Ровно 1 раз «{1}»
Соответствует одному символу, представленному в списке ниже «[- \ '] {1}»
Ровно 1 раз «{1}»
Один из символов «-» «-» Символ «\» »
Соответствует одному символу в диапазоне между «A» и «Z» «[A-Z] {0,1}»
От нуля до одного раза, столько раз, сколько возможно, возвращая по мере необходимости (жадный) «{0,1}»
Соответствует одному символу в диапазоне между «a» и «z» «[a-z] {1,30}»
От одного до 30 раз, столько раз, сколько возможно, отдача по мере необходимости (жадный) «{1,30}»
Соответствует одному символу, присутствующему в списке «-» «[-] {0,1}»
От нуля до одного раза, столько раз, сколько возможно, возвращая по мере необходимости (жадный) «{0,1}»
Или соответствует регулярному выражению с номером 3 ниже (вся группа терпит неудачу, если эта группа не соответствует) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1 , 30} »
Соответствует одному символу в диапазоне между «a» и «z» «[a-z] {1,2}»
От одного до 2 раз, столько раз, сколько возможно, отдача по мере необходимости (жадный) «{1,2}»
Соответствует одному символу в диапазоне между «» и «'» «[- \'] {1}»
Ровно 1 раз «{1}»
Соответствует одному символу в диапазоне между «A» и «Z» «[A-Z] {1}»
Ровно 1 раз «{1}»
Соответствует одному символу в диапазоне между «a» и «z» «[a-z] {1,30}»
От одного до 30 раз, столько раз, сколько возможно, отдача по мере необходимости (жадный) «{1,30}»
Я знаю, что это подтверждение полностью предполагает, что каждый человек, заполняющий форму, имеет западное имя, и это может исключить подавляющее большинствов мире. Однако я чувствую, что это шаг в правильном направлении. Возможно, это регулярное выражение является слишком базовым для гуру, чтобы его можно было упрощенно рассмотреть, или, возможно, есть какая-то другая причина, по которой я не смог найти вышеуказанный код в своих поисках. Я потратил слишком много времени, пытаясь выяснить это, вы, вероятно, заметите, насколько туманным является мое мнение обо всем этом, если вы посмотрите на мои названия тестов ниже.
Я проверил код для следующих имен, и результаты приведены в скобках справа от каждого имени.
- Стив Смит (ошибка)
- Stev3 Smith (ошибка)
- STeve Smith (ошибка)
- Стив Смит (сбой)
- Стив См1 (передан Стиву См)
- d'Are to Beaware (передано в Are Beaware)
- Джо Блоу (прошло)
- Hyoung Kyoung Wu (прошло)
- Майк О'Нил (пройдено)
- Стив Джонсон-Смит (прошел)
- Йозеф-Шмозев Гимдел (пройдено)
- О Генри Смит (прошло)
- Матаис д'Аррас (пройдено)
- Мартин Лютер Кинг-младший (пройдено)
- Даунтаун-Джеймс Браун (пройдено)
- Даррен Маккарти (пройдено)
- Джордж Де ФанкМастер (пройдено)
- Баскетбольный мяч Kurtis B-Ball (пройден)
- Ахмад эль-Джеффе (прошло)
Если у вас есть базовые имена, для работы вышеуказанного кода должно быть более одного до пяти, аналогичных тем, которые я использовал во время тестирования, этот код может быть для вас.
Если у вас есть какие-либо улучшения, пожалуйста, дайте мне знать. Я только на ранних стадиях (первые несколько месяцев работы над RegEx.
Спасибо и удачи,
Стив