Szukałem, szukałem, grałem i bawiłem się nim i chociaż nie jest on doskonały, może pomóc innym w podjęciu próby sprawdzenia poprawności imion i nazwisk, które zostały podane jako jedna zmienna.
W moim przypadku ta zmienna to $ name.
Użyłem następującego kodu dla mojego 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
Sam uczę się RegEx, ale mam wyjaśnienie kodu dostarczone przez znajomego RegEx.
Oto ona:
Potwierdź pozycję na granicy słowa «\ b»
Dopasuj poniższe wyrażenie regularne i przechwyć jego dopasowanie do odniesienia wstecznego numer 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} »
Od 2 do 5 razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{2,5}»
* POTRZEBUJĘ TUTAJ POMOCY ZROZUMIENIEM RAMIFIKACJI NINIEJSZEJ NOTATKI *
Uwaga: powtórzyłem samą grupę przechwytywania. Grupa przechwyci tylko ostatnią iterację. Umieść grupę przechwytywania wokół powtarzanej grupy, aby uchwycić wszystkie iteracje. «{2,5}»
Dopasuj jedno z poniższych wyrażeń regularnych (próba skorzystania z następnej alternatywy tylko wtedy, gdy to się nie powiedzie) «[AZ] {1} [az] {1,30} [-] {0,1}»
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,30}»
Od jednego do 30 razy, tyle razy, ile to możliwe, oddając w razie potrzeby (chciwy) «{1,30}»
Dopasuj pojedynczy znak obecny na liście „-” «[-] {0,1}»
Od zera do jednego razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{0,1}»
Lub dopasuj wyrażenie regularne numer 2 poniżej (próba wykonania następnej alternatywy tylko wtedy, gdy ta się nie powiedzie) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z poniższej listy «[- \ '] {1}»
Dokładnie 1 raz «{1}»
Jeden ze znaków „-” «-» A 'znak «\'»
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {0,1}»
Od zera do jednego razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{0,1}»
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,30}»
Od jednego do 30 razy, tyle razy, ile to możliwe, oddając w razie potrzeby (chciwy) «{1,30}»
Dopasuj pojedynczy znak obecny na liście „-” «[-] {0,1}»
Od zera do jednego razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{0,1}»
Lub dopasuj wyrażenie regularne numer 3 poniżej (cała grupa zawiedzie, jeśli ta nie pasuje) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,2}»
Od jednego do dwóch razy, tyle razy, ile to możliwe, dając w razie potrzeby (chciwy) «{1,2}»
Dopasuj pojedynczy znak z zakresu od „” do „'” «[- \'] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z zakresu od „A” do „Z” «[AZ] {1}»
Dokładnie 1 raz «{1}»
Dopasuj pojedynczy znak z zakresu od „a” do „z” «[az] {1,30}»
Od jednego do 30 razy, tyle razy, ile to możliwe, oddając w razie potrzeby (chciwy) «{1,30}»
Wiem, że ta weryfikacja całkowicie zakłada, że każda osoba wypełniająca formularz ma zachodnie imię i może to wyeliminować ogromną większość ludzi na świecie. Jednak czuję, że jest to krok we właściwym kierunku. Być może to wyrażenie regularne jest zbyt proste, aby guru mogli je w prosty sposób rozwiązać, a może jest inny powód, dla którego nie mogłem znaleźć powyższego kodu w moich wyszukiwaniach. Spędziłem zbyt dużo czasu, próbując to rozgryźć, prawdopodobnie zauważysz, jak mglisty jest mój umysł, jeśli spojrzysz na moje nazwy testów poniżej.
Przetestowałem kod na następujących nazwach, a wyniki są w nawiasach po prawej stronie każdej nazwy.
- STEVE SMITH (niepowodzenie)
- Stev3 Smith (porażka)
- STeve Smith (niepowodzenie)
- Steve SMith (niepowodzenie)
- Steve Sm1th (przekazany na Steve Sm)
- d'Are to Beaware (przekazane na Are to Beaware)
- Jo Blow (przeszedł)
- Hyoung Kyoung Wu (zaliczony)
- Mike O'Neal (zdany)
- Steve Johnson-Smith (zaliczony)
- Jozef-Schmozev Hiemdel (zaliczony)
- O Henry Smith (przeszedł)
- Mathais d'Arras (zaliczony)
- Martin Luther King Jr (zaliczony)
- Downtown-James Brown (zdany)
- Darren McCarty (zaliczony)
- George De FunkMaster (zaliczony)
- Kurtis B-Ball Basketball (zaliczony)
- Ahmad el Jeffe (zaliczony)
Jeśli masz podstawowe nazwy, musi być więcej niż jedna do pięciu, aby powyższy kod działał, które są podobne do tych, których użyłem podczas testów, ten kod może być dla Ciebie.
Jeśli masz jakieś ulepszenia, daj mi znać. Jestem dopiero na wczesnym etapie (kilka pierwszych miesięcy zastanawiania się nad RegEx.
Dzięki i powodzenia, Steve