Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式模式,以匹配字符串中至少1个数字和1个字符_Javascript_Regex_Validation - Fatal编程技术网

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

Javascript 正则表达式模式,以匹配字符串中至少1个数字和1个字符,javascript,regex,validation,Javascript,Regex,Validation,我有一个正则表达式 /^([a-zA-Z0-9]+)$/ 这只允许字母数字,但如果我只插入数字或字符,它也会接受它。我希望它能像字段只接受字母数字值一样工作,但该值必须至少包含1个字符和1个数字。此RE可以: /^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i 关于RE的解释: 匹配以下任一项: 至少一个数字,然后是一个字母或 至少一个字母,然后一个数字加上 任何剩余的数字和字母 (?:…)创建未引用的组 /i是忽略大小写标志,因此a-z==a-zA-z 为

我有一个正则表达式

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

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

此RE可以:

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
关于RE的解释:

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

  • (?:…)
    创建未引用的组
  • /i
    是忽略大小写标志,因此
    a-z
    ==
    a-zA-z

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

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

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

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

所以,测试一下这个:-

/^([a-zA-Z0-9]+)$/
那么这个,-

/\d/
/[A-Z]/i
那么这个,-

/\d/
/[A-Z]/i

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

可能有点晚,但这是我的回复:

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

说明:

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

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

\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]+$
    匹配一个或多个字母或数字,直到
    $
    结束


(答案:
a-z
匹配
a-zA-z

由于不允许输入特殊字符,因此接受的答案不起作用

这对我来说非常有效

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

  • 一位数必须
  • 一个字符必须(下或上)
  • 任何其他事情都是可选的

谢谢。

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

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


为什么我们需要区分大小写?结尾的/i使其不区分大小写。在您的代码中,您提到了
a-zA-Z
。我昨天做了一些测试,并推断
/[a-Z]/i
/[a-zA-Z]稍快一些/
。请参阅:@RobW链接页面上显示的数据与您的声明冲突。在Chrome上,
/[a-zA-Z]/
似乎更快。但无论如何,这是一个愚蠢的测试,性能一开始并不重要。如果您想在其中添加连字符和下划线检查,您的正则表达式将在字母/数字对之前使用任何连字符或下划线。例如:
^(?[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]]*$
abc-D12345这比下面的解决方案要好:如果要添加连字符和下划线检查,这仍然可以解决所有问题。例如:
^(?=.[0-9])(?=.[a-z])([a-z0-9_-]+)$
abc-D12345非常感谢您对思考方式的回答和解释这对lookaround的工作原理给出了很好的解释:亲爱的@phihag,正如您在警告中所说的:此正则表达式将在包含特殊字符的字符串上失败。它只匹配包含字母和数字的字符串。它不匹配包含字母的字符串,数字和特殊字符。我真的很喜欢这种方法的简单性。更容易阅读和维护。你好,保罗。我正在寻找一个只有数字[0-9]和两个空间字符[,]的正则表达式,然后是“ml”-至少应该有一个数字。你的解决方案看起来很棒,但我无法编写精确的正则表达式。我尝试了以下方法:。匹配(/(?=.*\d)[0-9][,.]{1,5}ml/g)。它不起作用。你能帮我吗。美丽而天才。这应该是公认的答案。从问题:
字段应该只接受字母数字值
Regex模式,以匹配字符串中至少1个数字和1个字符,这意味着至少必须输入字母数字,但只要输入或不输入,其他一切都可以。重新阅读问题。第二行:
如果仅插入数字或字符,则字段应仅接受字母数字值
重新读取第一行:
然后它也接受
,但他想两者都必须接受。所以我认为我的答案没有错。他们说他们的实际正则表达式只接受数字或字母,但他们至少需要1个数字和1个字母,而且只接受字母数字。7年前给出的被接受的答案看起来很完美。但是你可以想象你想要什么。有一个g好的。如果它应该包含特殊字符可以吗?这与
3b
1a2b3c4d
不匹配。这很有效。非常感谢