gpt4 book ai didi

javascript - 为什么 JavaScript 不接受我的 RegExp 结构?

转载 作者:行者123 更新时间:2023-11-30 07:48:31 24 4
gpt4 key购买 nike

我正在使用 RegExp 来验证 ASP.NET 网页上的一些用户输入。它旨在强制构建密码(即长度在 8 到 20 之间,至少一个大写字符,至少一个小写字符,至少一个数字,至少一个字符 #@!$% 并且没有用字母 L 或 O(大写或小写)或数字 0 和 1。此正则表达式在我的测试仪 (Expresso) 和我的 C# 代码中运行良好。

它是这样的:

(?-i)^(?=.{8,20})(?=.*[2-9])(?=.*[a-hj-km-np-z])(?=.*[A-HJ-KM-NP-Z])
(?=.*[#@!$%])[2-9a-hj-km-np-zA-HJ-KM-NP-Z#@!$%]*$

(为格式化添加的换行符)

但是,当我在 IE6 或 IE7 中运行它所在的代码时(没有尝试过其他浏览器,因为这是一个内部应用程序,我们是 Microsoft 商店),我收到一个运行时错误,提示“常规语法错误”表达'。就是这样 - 除了行号之外,错误消息中没有更多信息。

JavaScript 不喜欢的是什么?

最佳答案

在 Javascript 中有两种定义正则表达式的方法:

一个。通过 Regexp 对象构造函数:

var re = new RegExp("pattern","flags");
re.test(myTestString);

使用字符串文字:

var re = /pattern/flags;

您还应该注意,JS 不支持正则表达式的某些原则。有关 JS 不支持的功能的不完整列表,请查看 regular-expressions.info网站。

具体来说,您似乎在表达式上设置了一些标志(例如,不区分大小写的标志)。我建议您使用 /i 标志(如上面的语法所示)而不是使用 (?-i)

这将使您的正则表达式如下(似乎支持正前瞻):

/^(?=.{8,20})(?=.*[2-9])(?=.*[a-hj-km-np-z])(?=.*[A-HJ-KM-NP-Z])(?=.*[#@!$%])[2-9a-hj-km-np-zA-HJ-KM-NP-Z#@!$%]*$/i;

有关该主题的非常好的文章,请查看 Regular Expressions in JavaScript .

编辑(在霍华德的评论之后)


如果您只是将此 Regex 模式分配给 RegularExpressionValidator 控件,那么您将无法设置 Regex 选项(例如忽略大小写)。此外,您将无法使用 Javascript 支持的 Regex 文字语法。因此,剩下的唯一选择就是使您的模式本质上不区分大小写。例如,[a-h] 必须写成 [A-Ha-h]。很遗憾,这会使您的 Regex 变得冗长。

Here is a solution对于这个问题,虽然我不能保证它的合法性。想到的其他一些选项可能是完全关闭客户端验证并仅在服务器上进行验证。这将使您能够访问由 System.Text.RegularExpressions.Regex 对象实现的完整 Regex 风格。或者,使用 CustomValidator 并创建您自己的 JS 函数,该函数使用我(和其他人)建议的模式应用正则表达式匹配。

关于javascript - 为什么 JavaScript 不接受我的 RegExp 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/682288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com