我想测试自己的正则表达式,以便了解如何使用它并创建我的自定义正则表达式。
我试过这个:
^(?=.*\d)(?=.*[a-zA-Z])(?=.*[\W_]){3}$
(?=.*\d)
=>至少1个号码。
(?=.*[a-zA-Z])
=>至少1个字母。
(?=.*[\W_])
=>至少1个特殊字符。
{3}
=>至少3个字符。
不幸的是,它不起作用,但我想要输入至少1个数字,1个字母和1个特殊字符,以及至少3个字符。当用户键入这3种类型的字符时,我的消息消失,因为正则表达式是正确的^^
抱歉我的英文不好,如果你愿意,我可以给你更多细节,谢谢你的帮助:)
度过愉快的一天:)
答案 0 :(得分:5)
问题是你的{3}
量词适用于你的最后一次预测,这是荒谬的:这意味着在文本的开头,你必须匹配前瞻的3倍,这是给定的如果它匹配一次,因为环视是0宽度匹配。
您可以使用以下内容:
^(?=.*\d)(?=.*[a-zA-Z])(?=.*[\W_]).{3,}$
除了现有的预测外,还指定必须匹配至少3个字符。
如果您只是测试字符串,那么匹配
也足够了^(?=.*\d)(?=.*[a-zA-Z])(?=.*[\W_]).{3}
没有结束锚:你匹配3个字符,并且在满足你的要求后停止匹配以下内容。
答案 1 :(得分:2)
如果您想要1个数字,1个字母,1个特殊字符,那些至少3个字符。
^(?=\D*\d)(?=.*?[a-zA-Z]).*[\W_].*$
Here's a demo at regex101。或仅用于匹配:
^(?=\D*\d)(?=.*?[a-zA-Z]).*[\W_]
(?=\D*\d)
第一个前瞻需要一个数字(前面有任何\D
非数字)。(?=.*?[a-zA-Z])
秒前瞻需要一个alpha(前面有任何字符)。.*[\W_]
匹配,直到一个特殊字符。所有这些一起需要至少3个不同的字符:1位,1位,1位特殊。