Я шукав і шукав, грав і грав із ним, і хоча він не є ідеальним, він може допомогти іншим зробити спробу перевірити ім’я та прізвища, які були надані як одна змінна.
У моєму випадку ця змінна - $ 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}»
Відповідайте до регулярного виразу нижче (намагаючись наступний варіант, лише якщо цей не вдався) «[AZ] {1} [az] {1,30} [-] {0,1}»
Зіставити один символ у діапазоні між "A" та "Z" «[AZ] {1}»
Рівно 1 раз «{1}»
Зіставити один символ у діапазоні між "a" та "z" «[az] {1,30}»
Між одним і 30 разів, якомога більше разів, віддаючи по мірі необхідності (жадібно) «{1,30}»
Зіставити один символ, присутній у списку "-" «[-] {0,1}»
Від нуля до одного разу, якомога більше разів, віддаючи по мірі необхідності (жадібно) «{0,1}»
Або співставити регулярний вираз №2 нижче (намагаючись наступну альтернативу, лише якщо ця не вдалася) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
Зіставити один символ у діапазоні між "A" та "Z" «[AZ] {1}»
Рівно 1 раз «{1}»
Зіставте один символ у списку нижче «[- \ '] {1}»
Рівно 1 раз «{1}»
Один із символів «-» «-» A 'символ «\'»
Зіставити один символ у діапазоні між "A" та "Z" «[AZ] {0,1}»
Від нуля до одного разу, якомога більше разів, віддаючи по мірі необхідності (жадібно) «{0,1}»
Зіставити один символ у діапазоні між "a" та "z" «[az] {1,30}»
Між одним і 30 разів, якомога більше разів, віддаючи по мірі необхідності (жадібно) «{1,30}»
Зіставити один символ, присутній у списку "-" «[-] {0,1}»
Від нуля до одного разу, якомога більше разів, віддаючи по мірі необхідності (жадібно) «{0,1}»
Або співставити регулярний вираз №3 нижче (вся група виходить з ладу, якщо ця не відповідає) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
Зіставити один символ у діапазоні між "a" та "z" «[az] {1,2}»
Від одного до двох разів, якомога більше разів, віддаючи по мірі необхідності (жадібно) «{1,2}»
Зіставити один символ у діапазоні між "" та "" "« [- \ '] {1} »
Рівно 1 раз «{1}»
Зіставити один символ у діапазоні між "A" та "Z" «[AZ] {1}»
Рівно 1 раз «{1}»
Зіставити один символ у діапазоні між "a" та "z" «[az] {1,30}»
Між одним і 30 разів, якомога більше разів, віддаючи по мірі необхідності (жадібно) «{1,30}»
Я знаю, що ця перевірка повністю передбачає, що кожна людина, яка заповнює форму, має західне ім'я, і це може усунути переважну більшість людей у світі. Однак я відчуваю, що це крок у правильному напрямку. Можливо, цей регулярний вираз є надто базовим для того, щоб гуру справлявся спрощено, або, можливо, є якась інша причина, що я не зміг знайти вищезазначений код у своїх пошуках. Я витратив занадто довго, намагаючись розібратися в цьому трохи, ви, мабуть, помітите, наскільки туманний мій розум у всьому цьому, якщо ви подивитесь на мої тестові імена нижче.
Я перевірив код на наступні імена, і результати знаходяться в дужках праворуч від кожного імені.
- СТІВ СМИТ (провал)
- Stev3 Smith (провал)
- Стів Сміт (провал)
- Стів Сміт (провал)
- Стів Sm1th (передано Стіву Sm)
- d'Are to Beaware (передається "Are to Beaware")
- Джо Удар (пройшов)
- Х'юн Кюн Ву (пройшов)
- Майк О'Ніл (пройшов)
- Стів Джонсон-Сміт (пройшов)
- Юзеф-Шмозев Хіемдель (пройшов)
- О Генрі Сміт (пройшов)
- Матайс д'Аррас (пройшов)
- Мартін Лютер Кінг-молодший (пройшов)
- Центр міста - Джеймс Браун (пройшов)
- Даррен Маккарті (пройшов)
- Джордж Де ФанкМастер (пройшов)
- Куртис B-Ball Баскетбол (пройшов)
- Ахмад ель Джефф (минув)
Якщо у вас є основні імена, для роботи вищевказаного коду повинно бути більше одного до п'яти, подібних до тих, які я використовував під час тестування, цей код може бути для вас.
Якщо у вас є якісь вдосконалення, будь ласка, повідомте мене про це. Я просто на ранніх стадіях (перші кілька місяців з'ясування RegEx.
Дякую і удачі, Стів