我有一个正则表达式
/ ^([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 是ignore-case标志,因此 a-z == a-zA-Z .
/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]*"
也许有点晚了,但这是我的RE:
/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/
说明:
\w* - > 0或更多字母数字,在开头
\w*
\d+[a-zA-Z]|[a-zA-Z]+\d - >数字字母或字母数字
\d+[a-zA-Z]|[a-zA-Z]+\d
\w* - > 0或更多字母数字,再次
我希望这是可以理解的
此解决方案接受至少1个数字和至少1个字符:
[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
还有一个负面检查的想法 .
/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
^(?! at start look ahead if string does not
^(?!
\d*$ 仅包含数字 | 或
\d*$
|
[a-z]*$ 仅包含字母
[a-z]*$
[a-z\d]+$ 匹配一个或多个字母或数字,直到 $ 结束 .
[a-z\d]+$
$
Have a look at this regex101 demo
(i flag turns on caseless matching: a-z 匹配 a-zA-Z )
接受的答案不起作用,因为不允许输入特殊字符 .
它对我来说非常完美 .
^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$
一位数 must
一个字符 must (下或上)
其他所有东西都是可选的
谢谢 .
8 回答
为什么不首先应用整个测试,然后为字符和数字添加单独的测试?无论如何,如果你想在一个正则表达式中完成所有操作,请使用正向前瞻:
这个RE会做:
RE的解释:
匹配以下任一项:
至少一个数字,然后一个字母或
至少一个字母,然后一个数字加
任何剩余的数字和字母
(?:...)
创建一个未引用的组/i
是ignore-case标志,因此a-z
==a-zA-Z
.我可以看到其他响应者给了你一个完整的解决方案 . 正则表达式的问题在于它们难以维护/理解 .
一个更简单的解决方案是保留现有的正则表达式,然后创建两个新的正则表达式来测试“至少一个字母”和“至少一个数字” .
所以,测试一下: -
然后这个: -
然后这个: -
如果你的字符串通过了所有三个正则表达式,你就得到了你需要的答案 .
虽然接受的答案是正确的,但我发现这个正则表达式更容易阅读:
也许有点晚了,但这是我的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个字符:
还有一个负面检查的想法 .
^(?!
at start look ahead if string does not\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])(?=.*[a-zA-Z])(?=\S+$).{6,20}$
一位数 must
一个字符 must (下或上)
其他所有东西都是可选的
谢谢 .