我有这个正则表达式:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,26})
密码必须遵守以下规则:
一切正常,但我不能在开头和结尾处都禁止使用空格。
有什么建议吗? 使用javascript正则表达式测试。.
答案 0 :(得分:0)
您可以在开始/结束字符串定位点旁边使用否定的前瞻/后视来实现:
^(?!\s)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,26}(?<!\s)$
答案 1 :(得分:0)
您可以保留先行逻辑并添加缺少的条件,如下所示:
(?=\S)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,26})(?=.*\S$).*
(?= \ S)=>必须以非空格字符开头。
(?=。* \ S $)=>必须以非空格字符结尾。
答案 2 :(得分:0)
您可以添加一个额外的正向前行(?=\S.{6,24}\S$)
,以断言该字符串以非空白字符\S
开始和结束,并更新量词以将字符数反映为{6,24}
如果您的密码只能包含在预行中使用的字符,而不是匹配所有字符(包括空格),则可以再次使用包含所有允许的字符的字符类。
您的正则表达式可能如下:
^(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=\S.{6,24}\S$)[a-zA-Z0-9!@#$%^&*]+$
请参见regex demo