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
/^(?=.*[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]任何数字
- “+”无限搜索(显示所有结果)
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
不匹配。这很有效。非常感谢