字母数字我有一个正则表达式正则表达式,用于与至少1号和1个字符
/^([a-zA-Z0-9]+)$/
这只是仅允许字母数字,而且,如果我只插入数(S)或唯一的字符( s),那么它也接受它。我希望它能够像字段只应接受字母数字值一样工作,但该值必须至少包含1个字符和1个数字。
字母数字我有一个正则表达式正则表达式,用于与至少1号和1个字符
/^([a-zA-Z0-9]+)$/
这只是仅允许字母数字,而且,如果我只插入数(S)或唯一的字符( s),那么它也接受它。我希望它能够像字段只应接受字母数字值一样工作,但该值必须至少包含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
。为什么我们需要在这种情况下的灵敏度? –
/i最后会使其不区分大小写。 – Kasaku
在你的代码中,你提到了'a-zA-Z'。我昨天做了一些测试,并推断'/ [a-z]/i'比'/ [a-zA-Z] /'稍快。请参阅:http://jsperf.com/regexp-a-z-i-vs-a-za-z –
我可以看到其他的反应已经给你一个完整的解决方案。正则表达式的问题是它们可能难以维护/理解。
更简单的解决方案是保留现有的正则表达式,然后创建两个新的正则表达式来测试“至少一个字母”和“至少一个数字”。
因此,本次测试: -
/^([a-zA-Z0-9]+)$/
那么这样的: -
/\d/
那么这样的: -
/[A-Z]/i
如果字符串通过全部三个正则表达式,你有你需要的答案。
我真的很喜欢这个简单。更容易阅读和维护。 –
也许有点晚了,但是这是我的RE:
/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/
说明:
\w*
- > 0个或多个字母数字,一开始
\d+[a-zA-Z]|[a-zA-Z]+\d
- >一数字+字母或字母+数字
\w*
- > 0以上的字母数字,再次
我希望这是可以理解的
该解决方案接受至少1号和至少1个字符:
[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
虽然接受的答案是正确的,我觉得这是正则表达式很容易阅读:
REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
并带有否定检查的想法。
/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
^(?!
在启动look ahead如果字符串不\d*$
只包含数字|
或[a-z]*$
仅包含字母[a-z\d]+$
匹配一个或多个字母或数字,直到$
结束。Have a look at this regex101 demo
(在i
flag turns on caseless matching:a-z
比赛a-zA-Z
)
这比下面的解决方案更好:如果你想添加一个连字符和下划线检查,这将仍然工作。例:'^(?=。* [0-9])(?=。* [az])([a-z0-9 _-] +)$'abc-d12345 – Sababado
非常感谢回答和解释想法 – merveotesi
@Sababado感谢_ - 解决方案:-) – Rahi