我有一个正则表达式
/^([a-zA-Z0-9]+)$/
这只允许只输入字母数字,但如果我只插入数字或只插入字符,那么它也接受它。我希望它像该字段应该只接受字母数字值一样工作,但该值必须至少包含 1 个字符和 1 个数字。
我有一个正则表达式
/^([a-zA-Z0-9]+)$/
这只允许只输入字母数字,但如果我只插入数字或只插入字符,那么它也接受它。我希望它像该字段应该只接受字母数字值一样工作,但该值必须至少包含 1 个字符和 1 个数字。
为什么不先应用整个测试,然后为字符和数字添加单独的测试?无论如何,如果您想在一个正则表达式中完成所有操作,请使用正向预测:
/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
此 RE 将执行以下操作:
/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
RE的解释:
(?:...)
创建一个未引用的组/i
是忽略大小写标志,所以a-z
== a-zA-Z
。我可以看到其他响应者已经为您提供了完整的解决方案。正则表达式的问题在于它们可能难以维护/理解。
一个更简单的解决方案是保留现有的正则表达式,然后创建两个新的正则表达式来测试“至少一个字母”和“至少一个数字”。
因此,对此进行测试:-
/^([a-zA-Z0-9]+)$/
然后这个:-
/\d/
然后这个:-
/[A-Z]/i
如果您的字符串通过了所有三个正则表达式,您就有了所需的答案。
虽然接受的答案是正确的,但我发现这个正则表达式更容易阅读:
REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
此解决方案接受至少 1 个数字和至少 1 个字符:
[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))