早上好。 我的正则表达式不能满足我的需要。我不能以数字开头或结尾。我必须至少有一个符号,一个大写字母,一个小写字母,当然还有一个在外部"边界之间的数字"我已经描述过了。正则表达式必须至少6个字符长,最多20个字符。 以下是我的正则表达式:
^([^0-9](?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_!?@#$%])[^0-9]).{6,20}$
我遇到的问题是我似乎无法确定数字边界和长度。
例如,在正则表达式测试中,这是可以接受的,
MaA1?kss1111111
但我不能接受。
但这是可以接受的,
Mk?1wK
我没有起始号码,也没有结束号码。 我将不胜感激任何帮助。
答案 0 :(得分:2)
你可以调整你的正则表达式:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_!?@#$%])[^0-9].{4,18}[^0-9]$
它使用.{4,18}
(比您的长度要求少2),因为您在正则表达式的开头和结尾都有[^0-9]
。
或者(这也是我的首选解决方案)你可以检查{6,20}
长度并使用否定前瞻检查开头/结尾是否存在非数字:
^(?![0-9]|.*[0-9]$)(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_!?@#$%]).{6,20}$