我有一个正则表达式
/^([a-zA-Z0-9]+)$/
这个正则表达式只允许字母和数字,但如果我输入的是仅数字或仅字符,它也会接受。我希望它的作用是只接受包含至少1个字符和1个数字的字母数字值。
我有一个正则表达式
/^([a-zA-Z0-9]+)$/
这个正则表达式只允许字母和数字,但如果我输入的是仅数字或仅字符,它也会接受。我希望它的作用是只接受包含至少1个字符和1个数字的字母数字值。
/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
^(?=.*[0-9])(?=.*[a-z])([a-z0-9_-]+)$
abc-d12345 - Sababado这个正则表达式可以实现:
/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
RE的解释:
(?:...)
创建一个未被引用的组/i
是 忽略大小写 标记,这样 a-z
== a-zA-Z
。a-zA-Z
。我昨天进行了一些测试,并得出结论,/[a-z]/i
比 /[a-zA-Z]/
稍微快一点。参见:http://jsperf.com/regexp-a-z-i-vs-a-za-z - Rob W/[a-zA-Z]/
似乎更快。但那是一个有点愚蠢的测试,性能并不重要。 - phihag^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9_-]*$
abc-d12345 - Sababado我看到其他答复者已经给出了完整的解决方案。正则表达式的问题在于它们很难维护/理解。
一个更简单的解决方案是保留您现有的正则表达式,然后创建两个新的正则表达式来测试您的“至少一个字母”和“至少一个数字”。
因此,测试这个:
/^([a-zA-Z0-9]+)$/
那么这样做:
/\d/
那么就是这样:
/[A-Z]/i
如果你的字符串通过了这三个正则表达式,那么你就得到了你需要的答案。已被接受的答案无法正常工作,因为它不允许输入特殊字符。
这对我来说完美地起作用了。
^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$
谢谢。
该字段应仅接受字母数字值
。 - Toto虽然被认为是正确的答案,但我发现这个正则表达式更容易阅读:
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]+.*))
还有一个负检查的想法。
/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
^(?!
在字符串开头进行向前查找,如果字符串不包含\d*$
仅包含数字 |
或者[a-z]*$
仅包含字母[a-z\d]+$
匹配一个或多个字母或数字直到$
结尾。(i
标记打开不区分大小写匹配:a-z
匹配a-zA-Z
)
/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/
解释:
\w*
-> 0 或多个字母数字字符,在开头
\d+[a-zA-Z]|[a-zA-Z]+\d
-> 数字 + 字母 OR 字母 + 数字
\w*
-> 再次出现 0 或多个字母数字字符/[0-9][a-zA-Z]|[a-zA-Z][0-9]/
对我来说,它的工作效果很好...
编辑以下评论:
嗯,在深夜时有些短视:对不便之处表示歉意...
不完整的基本想法是,只需要在某个地方从数字到字母或从字母到数字的“转换”才能回答问题。
但下一个正则表达式应该适用于仅由字母数字字符组成的字符串:
/^[0-9a-zA-Z]*([0-9][a-zA-Z]|[a-zA-Z][0-9])[0-9a-zA-Z]*$/
在JavaScript中,可以进一步简化为:
/^[0-9a-z]*([0-9][a-z]|[a-z][0-9])[0-9a-z]*$/i
在我看来,这个答案比其他一些答案更加直观易懂(没有回溯等操作)。
希望这可以帮到你。
^
和结尾的 $
!你必须确保只有字母数字字符。但是这样还是不行。 - Andy A./\b([a-zA-Z]+[0-9]+)\b/g
3b
或 1a2b3c4d
不匹配。 - Toto