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

OM *_*ity 43 javascript regex validation

我有一个正则表达式

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

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

phi*_*hag 91

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

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
Run Code Online (Sandbox Code Playgroud)

  • 这比下面的解决方案更好:如果你想添加一个连字符和下划线检查,这仍然可以解决.例如:`^(?=.*[0-9])(?=.*[az])([a-z0-9 _-] +)$`abc-d12345 (4认同)
  • 警告:此正则表达式将在包含特殊字符的字符串上失败.它仅匹配具有字母和数字的字符串.它不包含字母,数字和特殊字符的字符串. (4认同)
  • 非常感谢回答和思考方式的解释 (2认同)

Rob*_*b W 17

这个RE会做:

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
Run Code Online (Sandbox Code Playgroud)

RE的解释:

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

  • (?:...) 创建一个未引用的组
  • /iignore-case标志,所以a-z== a-zA-Z.

  • @RobW链接页面上显示的数据与您的语句冲突.在Chrome上,`/ [a-zA-Z] /`似乎更快.但无论如何,这是一种愚蠢的测试,并且性能首先并不重要. (3认同)

Pau*_*lor 14

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

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

所以,测试一下: -

/^([a-zA-Z0-9]+)$/
Run Code Online (Sandbox Code Playgroud)

然后这个: -

/\d/
Run Code Online (Sandbox Code Playgroud)

然后这个: -

/[A-Z]/i
Run Code Online (Sandbox Code Playgroud)

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


Neu*_*ron 8

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

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
Run Code Online (Sandbox Code Playgroud)


小智 5

此解决方案接受至少1个数字和至少1个字符:

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
Run Code Online (Sandbox Code Playgroud)


Pra*_*ani 5

接受的答案不起作用,因为它不允许输入特殊字符。

它对我来说非常完美。

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

  • 一位数必须
  • 一个字符必须(小写或大写)
  • 所有其他可选的东西

谢谢你。