J'ai cherché et cherché et joué et joué avec et bien qu'il ne soit pas parfait, cela peut aider d'autres personnes à essayer de valider les noms et prénoms qui ont été fournis comme une variable.
Dans mon cas, cette variable est $ name.
J'ai utilisé le code suivant pour mon 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
J'apprends RegEx moi-même mais j'ai l'explication du code fournie par le copain RegEx.
C'est ici:
Affirmer la position à une limite de mot «\ b»
Faites correspondre l'expression régulière ci-dessous et capturez sa correspondance dans la référence arrière numéro 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} »
Entre 2 et 5 fois, autant de fois que possible, redonner au besoin (gourmand) «{2,5}»
* J'AI BESOIN D'AIDE ICI POUR COMPRENDRE LES RAMIFICATIONS DE CETTE NOTE *
Remarque: j'ai répété le groupe de capture lui-même. Le groupe ne capturera que la dernière itération. Placez un groupe de capture autour du groupe répété pour capturer toutes les itérations. «{2,5}»
Match soit l'expression régulière ci-dessous (en essayant la prochaine alternative seulement si celle-ci échoue) «[AZ] {1} [az] {1,30} [-] {0,1}»
Faire correspondre un seul caractère compris entre "A" et "Z" «[AZ] {1}»
Exactement 1 fois «{1}»
Correspond à un seul caractère compris entre "a" et "z" «[az] {1,30}»
Entre une et 30 fois, autant de fois que possible, redonner au besoin (gourmand) «{1,30}»
Correspond à un seul caractère présent dans la liste «-» «[-] {0,1}»
Entre zéro et une fois, autant de fois que possible, redonner au besoin (gourmand) «{0,1}»
Ou faites correspondre l'expression régulière numéro 2 ci-dessous (en essayant la prochaine alternative seulement si celle-ci échoue) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
Faire correspondre un seul caractère compris entre "A" et "Z" «[AZ] {1}»
Exactement 1 fois «{1}»
Correspond à un seul caractère présent dans la liste ci-dessous «[- \ '] {1}»
Exactement 1 fois «{1}»
Un des caractères «-» «-» Un «caractère« \ '»
Correspond à un seul caractère compris entre «A» et «Z» «[AZ] {0,1}»
Entre zéro et une fois, autant de fois que possible, redonner au besoin (gourmand) «{0,1}»
Correspond à un seul caractère compris entre "a" et "z" «[az] {1,30}»
Entre une et 30 fois, autant de fois que possible, redonner au besoin (gourmand) «{1,30}»
Correspond à un seul caractère présent dans la liste «-» «[-] {0,1}»
Entre zéro et une fois, autant de fois que possible, redonner au besoin (gourmand) «{0,1}»
Ou faites correspondre l'expression régulière numéro 3 ci-dessous (le groupe entier échoue si celui-ci ne correspond pas) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
Correspond à un seul caractère compris entre "a" et "z" «[az] {1,2}»
Entre une et 2 fois, autant de fois que possible, redonner au besoin (gourmand) «{1,2}»
Correspond à un seul caractère compris entre «» et «'» «[- \'] {1}»
Exactement 1 fois «{1}»
Faire correspondre un seul caractère compris entre "A" et "Z" «[AZ] {1}»
Exactement 1 fois «{1}»
Correspond à un seul caractère compris entre "a" et "z" «[az] {1,30}»
Entre une et 30 fois, autant de fois que possible, redonner au besoin (gourmand) «{1,30}»
Je sais que cette validation suppose totalement que chaque personne remplissant le formulaire a un nom occidental et cela peut éliminer la grande majorité des gens dans le monde. Cependant, j'ai le sentiment que c'est un pas dans la bonne direction. Peut-être que cette expression régulière est trop basique pour que les gourous puissent la traiter de manière simpliste ou peut-être qu'il y a une autre raison pour laquelle je n'ai pas pu trouver le code ci-dessus dans mes recherches. J'ai passé beaucoup trop de temps à essayer de comprendre cela, vous remarquerez probablement à quel point mon esprit est brumeux sur tout cela si vous regardez les noms de mes tests ci-dessous.
J'ai testé le code sur les noms suivants et les résultats sont entre parenthèses à droite de chaque nom.
- STEVE SMITH (échec)
- Stev3 Smith (échec)
- STeve Smith (échec)
- Steve SMith (échec)
- Steve Sm1th (passé le Steve Sm)
- d'Are à Beaware (passé le Are à Beaware)
- Jo Blow (passé)
- Hyoung Kyoung Wu (passé)
- Mike O'Neal (passé)
- Steve Johnson-Smith (passé)
- Jozef-Schmozev Hiemdel (passé)
- O Henry Smith (passé)
- Mathais d'Arras (passé)
- Martin Luther King Jr (passé)
- Downtown-James Brown (passé)
- Darren McCarty (passé)
- George De FunkMaster (passé)
- Kurtis B-Ball Basketball (réussi)
- Ahmad el Jeffe (passé)
Si vous avez des noms de base, il doit y en avoir plus d'un à cinq pour que le code ci-dessus fonctionne, qui sont similaires à ceux que j'ai utilisés lors des tests, ce code pourrait être pour vous.
Si vous avez des améliorations, veuillez me le faire savoir. Je suis juste au tout début (les premiers mois de la découverte de RegEx.
Merci et bonne chance, Steve