如何限制非字母字符不是密码的第一个或最后一个字符

问题描述:

如何限制密码,使其不允许第一个或最后一个字符为非字母字符(请参阅“标题”)?如何限制非字母字符不是密码的第一个或最后一个字符

我的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> 

例如:密码hi123 * HI被接受,但我怎么拒绝*hi123HI由于*是第一个字符(同样的问题,如果*是最后一个字符,或特殊字符或数字既是第一个也是最后一个字符)。

+0

请格式化你的代码。 – 2017-06-21 05:06:38

添加否定向前看符号检查最初和最后的字符:

/(?![^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,我想出了这个不使用lookarounds:pattern =“[a-zA-Z0-9] * [a-zA-Z0-9]。{8,}”,它符合我的标准。你怎么看?我尝试使用你的代码,并跳过了一些正则表达式网站的知识,但无法得到它太工作。是HTML还是其他语言的代码?请帮助! –

+0

但是你的regexp并没有强制规定至少有一个字母数字字符,并且它允许在我看到的最后一个非字母数字字符。这个正则表达式适用于我;请参阅https://regex101.com/r/x8RfhV/1/。请注意,'pattern'属性将在开始和结束时隐式地固定'^'和'$'。 – 2017-06-23 04:56:00

+0

拍摄,你说得对。回到绘图板。我会更多地阅读正则表达式,以便我也能理解你的答案。 –