À des fins de validation du site Web, j'ai besoin de la validation du prénom et du nom.
Pour le prénom, il ne doit contenir que des lettres, peut être composé de plusieurs mots avec des espaces et comporter au minimum trois caractères, mais un maximum aux 30 premiers caractères. Une chaîne vide ne doit pas être validée (par exemple Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smith et jason SMITH ).
Pour le nom de famille, il doit s'agir d'un seul mot, uniquement des lettres, d'au moins trois caractères, mais d'au plus 30 caractères. Les chaînes vides ne doivent pas être validées (par exemple, lazslo , Lazslo et LAZSLO ).
regex
validation
Hellnar
la source
la source
Réponses:
N'oubliez pas les noms comme:
Cela devrait faire l'affaire pour la plupart des choses:
/^[a-z ,.'-]+$/i
OU Soutenez les noms internationaux avec unicode super doux:
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u
la source
.
(point décimal / point / arrêt complet) car il est le joker regexp =)őŐűŰ
, il manque des caractères hongrois , des caractères polonaisłŁ
également, sans parler d'un certain nombre de caractères lituaniens et lettons. Essayez plutôt de trouver une bibliothèque qui transforme les caractères exotiques dans la bonne version sans accent, puis écrivez l'/^[a-z ,.'-]+$/i
expression rationnelle.陳大文
pas un nom valide ici?/^[\p{L}'][ \p{L}'-]*[\p{L}]$/u
, même s'il est assez indulgent.Vous faites de fausses hypothèses sur le format du prénom et du nom. Il vaut probablement mieux ne pas valider du tout le nom, à part vérifier qu'il est vide.
la source
Après avoir parcouru toutes ces réponses, j'ai trouvé un moyen de créer une petite regex qui prend en charge la plupart des langues et n'autorise que les caractères de mots. Il prend même en charge certains caractères spéciaux tels que les tirets, les espaces et les apostrophes. J'ai testé en python et il prend en charge les caractères ci-dessous:
Caractères pris en charge:
la source
^[\w'\-,.]*[^_!¡?÷?¿\/\\+=@#$%ˆ&*(){}|~<>;:[\]]*$
^[^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
J'ai créé une expression régulière personnalisée pour traiter les noms:
J'ai essayé ces types de noms et j'ai trouvé que cela fonctionnait parfaitement
Mon RegEx ressemble à ceci:
Modèle MVC4:
Veuillez noter le double
\\
pour les caractères d'échappementPour ceux d'entre vous qui sont nouveaux dans RegEx, j'ai pensé inclure une explication.
la source
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:
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.
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
la source
Le prénom serait
Si vous avez besoin que toute la partie du prénom soit inférieure à 30 lettres, vous devez le vérifier séparément, je pense. L'expression
".{3,30}"
devrait faire cela.Vos exigences en matière de nom de famille se traduiraient par
mais vous devriez les vérifier. Il y a beaucoup de noms de famille contenant des espaces.
la source
Comme l'a dit maček:
N'oubliez pas les noms comme:
et pour supprimer des cas comme:
Cela couvrira plus de cas:
la source
Je travaille sur l'application qui valide les passeports internationaux (ICAO). Nous ne prenons en charge que les caractères anglais. Alors que la plupart des caractères nationaux étrangers peuvent être représentés par un caractère de l'alphabet latin, par exemple è par e, il existe plusieurs caractères nationaux qui nécessitent une lettre supplémentaire pour les représenter, comme le tréma allemand qui nécessite l'ajout d'un `` e '' à la lettre par exemple ä par ae.
Voici le JavaScript Regex pour le prénom et le nom que nous utilisons:
Le nombre maximum de caractères sur le passeport international est de 31 maximum . Nous utilisons maxlength = "31" pour améliorer les messages d'erreur de mot au lieu de l'inclure dans l'expression régulière.
Voici un extrait de notre code dans AngularJS 1.6 avec la gestion des formulaires et des erreurs:
la source
J'utilise:
Et testez la longueur maximale en utilisant d'autres moyens
la source
Ce regex fonctionne pour moi (utilisait dans Angular 8):
Il sera invalide s'il y a: -
Exemple de prénom invalide (espace)
Exemple de prénom valide:
la source
Pour simplifier, vous pouvez utiliser:
Ce que j'aime à ce sujet, c'est que le nom de famille est toujours après le prénom, donc si vous allez entrer ces groupes correspondants dans une base de données et que le nom est John M. Smith, le 1er groupe sera John M. , et le 2e groupe sera Smith.
la source
^ affirme la position au début d'une ligne.
\ p {L} correspond à n'importe quel type de lettre de n'importe quelle langue
{2,} Quantifier - Correspond entre 2 fois et un nombre illimité de fois, autant de fois que possible, en redonnant au besoin (gourmand)
$ affirme la position à la fin d'une ligne
Il doit donc s'agir d'un nom dans n'importe quelle langue contenant au moins 2 lettres (ou symboles) sans chiffres ni autres caractères.
la source
Donc, avec le client, nous créons cette regex folle:
la source
Pour les noms et prénoms, il n'y a en réalité que 2 choses que vous devriez rechercher:
Voici mon expression régulière:
var regex = /^[A-Za-z-, </font>{3,20}?=.*\d)/
1. Longueur
Ici, {3,20} contraint la longueur de la chaîne entre 3 et 20 caractères.
2. Contenu
Les informations entre les crochets [A-Za-z] autorisent les caractères majuscules et minuscules. Tous les symboles suivants (- ,.) sont également autorisés.
la source
C'est ce que j'utilise.
Cette expression régulière n'accepte que les noms avec un minimum de caractères, de
A-Z a-z ,space and -
.Exemple de noms:
La limite du caractère du nom est 3. Si vous souhaitez changer cela, modifiez {3,} en {6,}
la source
L'expression suivante fonctionnera sur n'importe quel langage pris en charge par UTF-16 et garantira qu'il y a un minimum de deux composants dans le nom (c'est-à-dire premier + dernier), mais autorisera également n'importe quel nombre de prénoms.
Au moment d'écrire ces lignes, il semble qu'aucune des autres réponses ne réponde à tous ces critères. Même
^\p{L}{2,}$
, qui est le plus proche, est insuffisant car il correspondra également aux caractères "invisibles", tels queU+FEFF
(Espace sans rupture de largeur zéro).la source
Essayez ces solutions, pour une compatibilité maximale, comme je l'ai déjà posté ici :
JavaScript:
var nm_re = /^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$/;
HTML5:
<input type="text" name="full_name" id="full_name" pattern="^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$" required>
la source
Cela semble faire le travail pour moi:
la source
Une fonction simple utilisant preg_match en php
la source
Nom complet avec un seul espace:
la source
Si vous voulez que le prénom entier comprenne entre 3 et 30 caractères sans aucune restriction sur les mots individuels, essayez ceci:
Attention, il exclut toutes les lettres étrangères comme é, è, à, ï.
Si vous voulez que la limite de 3 à 30 caractères s'applique à chaque mot individuel, Jens regexp fera le travail.
la source
la source