我有正则表达式
/^([a-zA-Z0-9]+)$/
这只允许字母数字,但也如果我只插入数字(s)或只字符(s) ,然后也接受它。我希望它像字段应该只接受字母数字值,但值必须包含至少1个字符和1个数字。
这个回复将会:
/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
注释:
(?:...)
/i
a-z
a-zA-Z
为什么不首先应用整个测试,然后为字符和数字添加单独的测试呢?无论如何,如果您想在一个 regexp 中完成所有操作,请使用积极的前瞻:
/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
我看到其他急救人员已经给了你一个完整的解决方案。正则表达式的问题在于它们很难维护/理解。
一个更简单的解决方案是保留现有的正则表达式,然后创建两个新的正则表达式来测试“至少一个字母”和“至少一个数字”。
所以,测试这个:-
然后这个:-
/\d/
/[A-Z]/i
如果字符串通过了所有三个正则表达式,就得到了所需的答案。
也许有点晚了,但这是我的回复:
/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/
说明:
\w*-> 0或更多的字母数字数字,在开头
\w*
数字 + 字母或字母 + 数字
\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
\d*$
|
[a-z]*$
[a-z\d]+$
$
看看这个 regex101演示
(i标志打开无壳匹配: a-z匹配 a-zA-Z)
i
接受的答案不工作,因为它不允许输入特殊字符。
对我来说很有效。
^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$
谢谢你。
如果你需要把数字放在任何一个单词的末尾,这个方法对我很有效:
/\b([a-zA-Z]+[0-9]+)\b/g
简单地说:
/[0-9][a-zA-Z]|[a-zA-Z][0-9]/
对我来说非常有效。
编辑以下评论:
我自己在深夜的一些短视行为给您带来不便,我表示歉意。
不完全的基本思想是,只有一个“转变”从一个数字到一个阿尔法或从一个阿尔法到一个数字是需要的地方来回答这个问题。
但是 next regex 应该为只包含字母数字字符的字符串执行此任务:
/^[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
恕我直言,阅读和理解它比其他一些答案更直接(没有回溯之类的)。
希望这个能帮上忙。