我正在编写一个登录表单,我想使用正则表达式来验证用户输入,如下所示:
用户名:
([a-zA-Z0-9]+([_ -]?[a-zA-Z0-9])*){5,16}
密码:
这是我到目前为止所拥有的,但它不起作用
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[" !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"]).{8,16}
非常感谢您在这方面的帮助
我使用带有正则表达式的html输入元素的模式标签来验证客户端的用户输入,并使用PHP来验证服务器端的输入。
我正在设计登录/注册系统,如果您认为我应该对用户名和密码实施不同的限制,请告诉我
再次感谢
由于我不知道您使用的是哪种编程语言,因此我将向您展示 PCRE 风格的正则表达式。这允许诸如负向后查找之类的事情,您将在用户名验证中看到这种情况。
此外,您不应将密码长度限制为 16。
^(?![_ -])(?:(?![_ -]{2})[\w -]){5,16}(?<![_ -])$
^(?:(?=.*?\p{N})(?=.*?[\p{S}\p{P} ])(?=.*?\p{Lu})(?=.*?\p{Ll}))[^\p{C}]{8,16}$
** VALID **
usern
username-is-writ
username is here
username_is_here
** INVALID **
user
username-is-written-here
-username
_username
username
username-
username_
username
username--here
username here
username__here
username- here
username _here
注意:上面第8个无效输入有尾随空格
usern
username-is-writ
username is here
username_is_here
********** VALID **********
Password1!
TestPass###231
My Pass#123~12`1
!#$Afs1!@(*''
VDFt35q#@$@
éA1!@#!@#!
********* INVALID *********
PASSWORD1!
password1!
Password1
Password
Passw1!
ThisIsMySuperLongPassword1!
Ae! 1
注意:上面最后一个无效示例使用了制表符(无效字符)
Password1!
TestPass###231
My Pass#123~12`1
!#$Afs1!@(*''
VDFt35q#@$@
éA1!@#!@#!
^
在行首声明位置。(?![_ -]
负向前视以确保用户名不以集合中的字符开头 _ -
(?:(?![_ -]{2})[\w -]){5,16}
(?![_ -]{2})
负向前视以确保集合中不存在两个紧接着彼此的字符。_ -
[\w -]
) 或空格或 a-zA-Z0-9_
-
(?<![_ -]
_ -
$
^
(?:(?=.*?\p{N})(?=.*?[\p{S}\p{P} ])(?=.*?\p{Lu})(?=.*?\p{Ll}))
。这将匹配任何字符任意次数,但尽可能少。
.*?
(?=.*?\p{N})
(?=.*?[\p{S}\p{P} ]
(?=.*?\p{Lu})
(?=.*?\p{Ll})
[^\p{C}]{8,16}
$
答案解释
如下:
/^(?!.*__.*)(?!.*\s\s.*)(?!.*--.*)[a-z_\s-]{5,16}$/