Cum să restricționați caracterul non-alfabetic să nu fie primul sau ultimul caracter al unei parole (Programare, Html, Intrare, Validare Html5)

Elvis Presley a intrebat.

Cum pot restricționa parola astfel încât să NU permită ca primul sau ultimul caracter să fie caractere nealfabetice (a se vedea „titlu”)?

Codul meu 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>

Exemplu: Parola hi123*HI este acceptată, dar cum pot respinge *hi123HI din cauza faptului că * este primul caracter (aceeași problemă dacă * a fost ultimul caracter, sau dacă caracterele speciale sau numerele au fost atât primul cât și ultimul caracter).

user663031

Comentarii

  • Vă rugăm să formatați codul. – user663031
1 răspunsuri
user663031

Adăugați lookaheads negative pentru a verifica caracterele inițiale și finale:

/(?![^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

Comentarii

  • Torazaburo, am ajuns la acest lucru fără a folosi lookarounds: pattern = „[a-zA-Z0-9]*[a-zA-Z0-9].{8,}” și satisface criteriile mele. Ce părere aveți? Am încercat să folosesc codul dvs. și am răsfoit câteva site-uri de regex pentru cunoștințe, dar nu am reușit să fac să funcționeze. Era un cod pentru HTML sau pentru un alt limbaj? Vă mulțumesc pentru ajutor! –  > Por Elvis Presley.
  • Dar regexp-ul dvs. nu aplică regula conform căreia trebuie să existe cel puțin un caracter alfanumeric și, din câte văd eu, permite un caracter nealfanumeric la sfârșit. Această regexp funcționează pentru mine; vezi regex101.com/r/x8RfhV/1. Rețineți că pattern atributul va ancora în mod implicit ^ și $ la început și la sfârșit. – user663031
  • Trage, ai dreptate. Înapoi la masa de desen. O să citesc mai mult despre regexp ca să pot înțelege și răspunsul tău. –  > Por Elvis Presley.