正则表达式模式匹配字符串中至少1个数字和1个字符

时间:2011-10-07 08:36:20

标签: javascript regex validation

我有正则表达式

  

/^([a-zA-Z0-9]+)$/

这只允许使用字母数字,但如果我只插入数字或只插入字符,那么它也会接受它。我希望它工作,因为字段应该只接受字母数字值,但该值必须至少包含1个字符和1个数字。

9 个答案:

答案 0 :(得分:82)

为什么不首先应用整个测试,然后为字符和数字添加单独的测试?无论如何,如果你想在一个正则表达式中完成所有操作,请使用正向前瞻:

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/

答案 1 :(得分:17)

这个RE会做:

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i

RE的解释:

  • 匹配以下任一项:
    1. 至少一个数字,然后一个字母
    2. 至少一个字母,然后一个数字加上
  • 任何剩余的数字和字母

  • (?:...)创建一个未引用的群组
  • /i ignore-case 标志,因此a-z == a-zA-Z

答案 2 :(得分:14)

我可以看到其他响应者给了你一个完整的解决方案。正则表达式的问题在于它们难以维护/理解。

更简单的解决方案是保留现有的正则表达式,然后创建两个新的正则表达式来测试“至少一个字母”和“至少一个数字”。

所以,测试一下: -

/^([a-zA-Z0-9]+)$/

然后: -

/\d/

然后: -

/[A-Z]/i

如果你的字符串通过所有三个正则表达式,你就得到了你需要的答案。

答案 3 :(得分:5)

虽然接受的答案是正确的,但我发现这个正则表达式更容易阅读:

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"

答案 4 :(得分:4)

此解决方案接受至少1个数字且至少包含1个字符:

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))

答案 5 :(得分:3)

也许有点晚了,但这是我的RE:

/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/

说明:

\w* - >开头的0个或更多字母数字数字

\d+[a-zA-Z]|[a-zA-Z]+\d - >数字+字母或字母+数字

\w* - > 0个或更多字母数字,再次

我希望这是可以理解的

答案 6 :(得分:2)

带负面检查的想法。

/^(?!\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 matchinga-z匹配a-zA-Z

答案 7 :(得分:0)

无法接受接受的答案,因为不允许输入特殊字符。

它对我来说很完美。

^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{6,20}$

  • 一位必须
  • 一个字符必须(下或上)
  • 其他所有可选内容

谢谢。

答案 8 :(得分:0)

如果您需要将数字放在任何单词的末尾,这对我有用:

/\b([a-zA-Z]+[0-9]+)\b/g
  • \ b单词边界
  • [a-zA-Z]任何字母
  • [0-9]任何数字
  • “ +”个无限搜索(显示所有结果)