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

我有一个正则表达式

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

这仅允许字母数字,但是如果我仅插入数字或字符,则它也接受。 我希望它像字段应该只接受字母数字值一样工作,但该值必须至少包含1个字符和1个数字。

OM The Eternity asked 2020-07-26T07:58:35Z
8个解决方案
90 votes

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

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
phihag answered 2020-07-26T07:59:24Z
17 votes

该RE将执行以下操作:

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

RE的解释:

  • 符合以下任一条件:
    1. 至少一个数字,然后一个字母或
    2. 至少一个字母,然后一个数字加
  • 任何剩余的数字和字母

  • /i创建一个未引用的组
  • /i是忽略大小写标志,因此a-z == a-zA-Z
Rob W answered 2020-07-26T08:00:14Z
14 votes

我可以看到其他响应者为您提供了完整的解决方案。 正则表达式的问题在于它们可能难以维护/理解。

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

因此,为此进行测试:-

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

然后这:-

/\d/

Then this :-

/[A-Z]/i

如果您的字符串通过了所有三个正则表达式,则您将获得所需的答案。

Paul Alan Taylor answered 2020-07-26T08:01:52Z
4 votes

尽管接受的答案是正确的,但我发现此正则表达式更容易阅读:

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
Lonely Neuron answered 2020-07-26T08:02:12Z
4 votes

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

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
user2043372 answered 2020-07-26T08:02:32Z
3 votes

也许有点晚,但这是我的回复:

\w*

说明:

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

\w*->一个数字+一个字母或一个字母+一个数字

\w*-> 0个或多个字母数字

我希望这是可以理解的

Pablo Garcia answered 2020-07-26T08:03:14Z
2 votes

还有一个否定检查的想法。

/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
  • a-z在开始时向前看,如果字符串不
  • a-z仅包含数字a-zA-Z
  • a-z仅包含字母
  • a-z匹配一个或多个字母或数字,直到a-zA-Z结尾。

看看这个regex101演示

a-z标志打开无外壳匹配:a-z匹配a-zA-Z

bobble bubble answered 2020-07-26T08:04:01Z
0 votes

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

它对我来说很完美。

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

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

谢谢。

Pratik Butani answered 2020-07-26T08:04:42Z
translate from https://stackoverflow.com:/questions/7684815/regex-pattern-to-match-at-least-1-number-and-1-character-in-a-string