正则表达式 - 必须包含数字且不能包含特殊字符

3
我想用正则表达式检查以下内容:
  1. 字符串是否包含数字
  2. 字符串不包含特殊字符(!<>?= + @ {} _ $%)
现在看起来是这样的: ^ [^!<>?=+@{}_$%]+$ 我应该如何编辑这个正则表达式以检查字符串中是否有数字(它必须包含数字)?

正则表达式应该允许什么内容?这是我简化它的方法。 - 10100111001
使用在线正则表达式检查器可能会有所帮助。请参考此工具 https://regex101.com/ - JiminyCricket
正则表达式应该允许所有不包含特殊字符且至少包含一个数字的字符串。它将用于检查地址字段中是否有数字。 - tehteh
3个回答

3

您可以在正则表达式中添加[0-9]+\d+,如下所示:

^[^!<>?=+@{}_$%]*[0-9]+[^!<>?=+@{}_$%]*$^[^!<>?=+@{}_$%]*\d+[^!<>?=+@{}_$%]*$

[0-9]\d的区别请参见这里


1
在同一个正则表达式中重复相同的字符类别是非常不令人满意的。顺便说一下,您发布的链接是针对Python的。在JS中,\d[0-9]完全等效 - user663031
@torazaburo 或许在 JS 中是这样的,但我记得在其他一些正则表达式中,\d 可以包括 Unicode 字符。 - Tim Biegeleisen
当然可以,但是这个问题是关于JS的。 - user663031

2

只需查看数字:

var re = /^(?=.*\d)[^!<>?=+@{}_$%]+$/;

console.log(re.test('bob'));
console.log(re.test('bob1'));
console.log(re.test('bob#'))

< p > (?=.*\d) 部分是查找输入中某个位置的单个数字。


我在发布之前怎么没看到这个答案?糟糕!!;P - Whothehellisthat

0

你只需要添加数字检查,是吗?可以这样做:

/^(?=.*\d)[^!<>?=+@{}_$%]+$/

我们进行前瞻性检查(就像在不移动字符串位置的情况下查看后面的字符),以检查字符串中是否至少有一个数字。 然后,我们按照正常方式检查字符串中是否没有这些符号,并随着我们的检查逐步移动字符串。

请注意:如果您想匹配换行符(又称换行符),则可以将点.更改为 [\ W \ w] 。 这将匹配任何字符。 您可以用多种方式做到这一点,但它们几乎都很笨拙,所以由您决定。


这不是和torazaburo上面的解决方案一样吗? - tehteh
是的 - 我刚发布时就看到了。但我的帖子提供了一些背景和其他信息,所以并不完全浪费 ;D - Whothehellisthat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接