Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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 RegExp不能按预期工作_Javascript_Regex - Fatal编程技术网

为什么我的JavaScript RegExp不能按预期工作

为什么我的JavaScript RegExp不能按预期工作,javascript,regex,Javascript,Regex,我正在编写一个密码屏幕,密码安全性要求的长度介于8到20个字符之间,必须包含至少一个字母字符、至少一个数字字符和至少一个特殊字符[!@$%^&*] 我拼凑了这个正则表达式,它似乎在C中工作,但当我开始重写JavaScript验证代码时,正则表达式将我认为有效的密码标记为无效 下面是我分配给RegExp的正则表达式: var regExPatt = new RegExp('^(?=(?:.*[a-zA-Z]){1})(?=(?:.*\d){1})(?=(?:.*[!@@#$%^&*]){1

我正在编写一个密码屏幕,密码安全性要求的长度介于8到20个字符之间,必须包含至少一个字母字符、至少一个数字字符和至少一个特殊字符[!@$%^&*]

我拼凑了这个正则表达式,它似乎在C中工作,但当我开始重写JavaScript验证代码时,正则表达式将我认为有效的密码标记为无效

下面是我分配给RegExp的正则表达式:

var regExPatt = new RegExp('^(?=(?:.*[a-zA-Z]){1})(?=(?:.*\d){1})(?=(?:.*[!@@#$%^&*]){1})(?!.*\s).{8,20}$');
注意:double@@symbol用于将@symbol放入RegExp,否则它会试图像对待Razor变量一样对待部分字符串,这样事情会很快发生

这个正则表达式哪里出了问题?我知道这相当复杂

有效的密码:

freddy1234%
freddy123$5
freddy12#45
freddy1@345
freddy!2345
无法使用的密码:

test1234%
wilma1234%

有什么想法吗?

JavaScript开发人员应该了解

对象描述 想要使用正向或负向前瞻的开发人员应该考虑到这需要JavaScript v1.5,因为它可以在页面上读取。但现在这应该没有问题,因为这是2000年11月发布的一个非常旧的版本,现在使用的所有浏览器都支持1.5版JavaScript

Lookbehind还不是JavaScript支持的JavaScript v1.8.5

在Wikipedia页面上可以找到JavaScript版本列表以及哪个浏览器支持哪个JavaScript版本


包含指向页面的链接,说明在哪个版本的JavaScript中添加了哪些内容。

因此,不允许使用空格、圆括号、分号、管道、问号、尖括号、破折号、下划线、等号、加号、斜线、句号、逗号或波浪号?这可能会让一些用户感到沮丧,因为它们中的大多数显然都是符号。考虑到迭代字符串所需的时间/精力是多么少,我会这样做,而不是限制正则表达式。我可以说服用户允许这些字符。然而,我仍然不明白为什么弗雷迪*工作而威尔玛*不工作。有什么想法吗?谢谢你的格式帮助,Biffen。@user3669641正则表达式是用html代码呈现的吗?你能在浏览器里查一下网页的源代码吗?我想我刚才有一条评论解释了它。JavaScript不允许环视语法。上面的正则表达式是基于它构建的。我只是将其拆分为4个不同的正则表达式,并对其进行设置以避免这种情况。谢谢大家的帮助。