2017-06-21 7 views
0

Comment limiter le mot de passe afin qu'il ne permette pas au premier ou au dernier caractère d'être un caractère non alphabétique (voir "titre")?Comment limiter le caractère non alphabétique à ne pas être le premier ou le dernier caractère d'un mot de passe?

Mon code HTML:

<form action = "." method="post"> 
    <input type="password" 
    placeholder = "New Password..." 
    name= "password" 
    title = "Password must be at least 8 characters, at least one alphabetic character [a-zA-Z], at least one non-alphabetic character, which is not the first or last character." 
    pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"> 
</form> 

Exemple: Mot de passe hi123 * HI est accepté, mais comment puis-je rejeter *hi123HI en raison du fait * est le premier caractère (même problème si * était le dernier caractère, ou les caractères spéciaux ou les chiffres étaient à la fois le premier et le dernier caractère).

+0

S'il vous plaît formater votre code. –

Répondre

0

Ajouter lookaheads négatifs pour vérifier les caractères initiaux et finaux:

/(?![^A-Z])(?!.*[^A-Z]$)(?=.*[A-Z])(?=.*[^A-Z]).{8,}/i 
^^^^^^^^^^            NO INITIAL SPECIAL CHAR 
      ^^^^^^^^^^^^^         NO FINAL SPECIAL CHAR 
         ^^^^^^^^^^^      AT LEAST ONE LETTER 
            ^^^^^^^^^^^^   AT LEAST ONE SPECIAL CHAR 
               ^^^^^^  EIGHT OR MORE CHARS 
+0

Torazaburo, je suis arrivé avec ça sans utiliser de lookarounds: pattern = "[a-zA-Z0-9] * [a-zA-Z0-9]. {8,}" et il satisfait mes critères. Qu'est-ce que tu penses? J'ai essayé d'utiliser votre code, et j'ai parcouru quelques sites regex pour avoir des connaissances, mais je n'ai pas pu le faire fonctionner. Ce code était-il pour HTML ou une autre langue? Preciate l'aide! –

+0

Mais votre expression rationnelle n'applique pas la règle qu'il y ait au moins un caractère alphanumérique, et elle permet un caractère non-alphanumérique à la fin autant que je peux voir. Cette expression rationnelle fonctionne pour moi; voir https://regex101.com/r/x8RfhV/1/. Notez que l'attribut 'pattern' ancrera implicitement'^'et' $ 'au début et à la fin. –

+0

Tirez, vous avez raison. Retour à la planche à dessin. Je vais lire plus sur l'expression rationnelle pour que je puisse comprendre votre réponse. –