javascript 正则表达式求值导致浏览器挂起

2023-12-25

我在使用正则表达式进行自定义验证时遇到问题。

我有一个不引人注目的方法:

jQuery.validator.addMethod("isRegex", function (value, element, params) {
    if (value.length < 1) return true;
    var re = new RegExp(params.regex);
    var match = re.exec(value);
    return match;
});

起初,我使用这个正则表达式来验证电子邮件表单字段:

^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$

该事件将被“onkeyup”触发,一开始它会起作用,但如果电子邮件地址太长,则会导致浏览器挂起,唯一的恢复方法是重新启动浏览器。这种情况发生在 IE 和 Chrome 上,但也可能发生在 Firefox 上。

例如输入“[电子邮件受保护] /cdn-cgi/l/email-protection“会很好的。”[电子邮件受保护] /cdn-cgi/l/email-protection“ 也可以毫无问题地工作,但是“测试测试[电子邮件受保护] /cdn-cgi/l/email-protection" 将挂在最后一个字母上。

起初我认为正则表达式可能效率低下,导致无限循环或锁定,所以我将其更改为简单的东西:

^.+@.+\..+$

部分成功,我可以输入更长的电子邮件地址,但它最终仍然挂起。

然后我想我应该禁用 onkeyup 事件,也许只是验证模糊,为此我使用了:

   $("#divEmail input[data-val-fieldregex]").keyup(function () { return false; });

现在键盘被禁用,但浏览器挂起模糊,所以这意味着代码:

    var re = new RegExp(params.regex);
    var match = re.exec(value);

必须无法处理大值。

有任何想法吗?


尝试更换([-+.]*[\w-]+)* by ([-.]\w+)*

^\w+([-.]\w+)*@\w+([-.]\w+)*\.\w{2,4}$

您可以找到有关灾难性回溯的更多信息here http://www.regular-expressions.info/catastrophic.html.

第二种模式也可能导致灾难性的回溯,因为点可以与文字点和 arobase 匹配。

请注意,这种模式非常基本,并且会排除许多格式良好的电子邮件地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript 正则表达式求值导致浏览器挂起 的相关文章

  • Elmah 不会在 MVC 应用程序中记录 http post 请求的异常 - 如果请求包含 XML

    我在 MVC4 RC 应用程序中遇到了一个奇怪的问题 在 NET 4 0上运行 我刚刚设置 Elmah 来记录异常 错误 我基本上安装了埃尔玛MVC and elmah sqlserverNuGet 包 分别为2 0 0和1 2版本 它似乎
  • 如何使用正则表达式将多个
    标签替换为一个
    标签?

    I want br br 变成 br 正则表达式的模式是什么 注 br 标签可以连续出现两次以上 html preg replace br gt s i br html 这将捕获任何组合 br br or br 它们之间有任意数量或类型的空
  • Vim 搜索模式,如果出现则删除到行尾

    我正在尝试在文本文件中搜索特定模式 如果出现这种模式 则意味着该行的其余部分不需要 因此可以删除 我尝试过使用以下命令 但到目前为止还没有成功 s pattern d g pattern d 如果有人有任何建议 他们将不胜感激 would
  • hive regexp_extract 怪异

    我在 regexp extract 方面遇到一些问题 我正在查询制表符分隔的文件 我正在检查的列具有如下所示的字符串 abc def ghi 现在 如果我这样做 select distinct regexp extract name 0 f
  • Pandas系列矢量化文本处理

    我想使用矢量化操作改进我的 Pandas 代码 假设我有一个简单的 DataFrame 其中有一个文本列 其中可能包含 url Column1 0 hello http www google com 1 bye www mail com w
  • 有人能给我一个 1 到 5 之间数字的正则表达式吗

    有人能给我一个 1 到 5 之间的单个数字的正则表达式吗 例如输入必须是 1 到 5 之间的数字 55 或 23 不匹配 尝试使用anchors http www regular expressions info anchors html
  • 删除emacs中多余的空行

    M x flush lines 删除缓冲区中的所有空白行 但是我只想删除多余的空白行 也就是说 如果有n个连续的空白行我想删除n 1并保留一个 我知道删除空白行可以完成该点下的空白行的工作 但是我想要一个适用于整个缓冲区的简单解决方案 有什
  • C++ 正则表达式,未知转义序列 '\.'警告

    我第一次尝试在 C 中使用正则表达式 我对转义序列有点困惑 我只是想匹配字符串开头的点 为此 我使用表达式 它有效 但我的编译器 g 生成警告 warning unknown escape sequence regex self regex
  • 正则表达式 - 将 target="blank" 添加到我的内容中的所有 标记链接

    有人可以帮我在 C net 中创建一个正则表达式来添加target blank to all a 在我的内容中标记链接 如果链接已经设置了目标 则将其替换为 blank 目的是在新窗口中打开我的内容中的所有链接 感谢你的帮助 dotnet岩
  • 正则表达式中的“g”标志是什么意思?

    的含义是什么g正则表达式中的标志 之间有什么区别 g and g用于全局搜索 这意味着它将匹配所有出现的情况 通常你还会看到i这意味着忽略大小写 参考 全局 JavaScript MDN https developer mozilla or
  • Bash:单行命令以与 grep 命令相反的状态退出?

    如何减少以下 bash 脚本 grep P STATUS Perfect recess txt exit 1 exit 0 看起来我应该能够用一个命令来完成它 但我这里总共有 3 个命令 我的程序应该 阅读课间休息 txt 如果它包含 ST
  • 局部变量或实例字段名称与正则表达式“[a-z]+”不匹配

    将 Android studio 升级到2 1 2 当我将旧项目导入其中时 我的代码中充满了警告 警告是 Instance field name doesn t match regex a z Local variable name doe
  • 删除PHP字符串中所有不匹配的字符?

    我有一个文本 我想从中删除所有不属于以下字符的字符 所需字符 0123456789 abcdefghijklmnopqrstuvwxyz n 最后一个是我确实想保留的 n 换行符 要匹配除列出的字符之外的所有字符 请使用反转字符集 http
  • Python 中的正则表达式匹配长度超过八个字母的任何内容

    尽管尝试掌握 grep 和相关的 GNU 软件 但我还没有接近掌握正则表达式 我确实喜欢它们 但我还是觉得它们有点碍眼 我想这个问题对某些人来说并不困难 但我花了几个小时试图弄清楚如何在我最喜欢的书中搜索大于一定长度的单词 最后 想出了一些
  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • jQuery UI 对话框 + 验证

    我在单击 保存 后使用 Jquery Validate 验证 jQuery UI 对话框时遇到问题 这是我创建 Jquery 对话框的代码 它从目标 href URL 加载对话框 document ready dialogForms fun
  • 与有效正则表达式匹配的正则表达式

    是否存在与有效正则表达式匹配的正则表达式 我知道正则表达式有多种风格 其中一种就可以了 是否存在与有效正则表达式匹配的正则表达式 根据定义 它非常简单 No 所有正则表达式的语言是no regular语言 只需查看嵌套括号 因此不可能有re
  • 在存储库模式中按 ID 进行过滤是否是不好的做法

    我正在使用 ASP NETMVC4 with 实体框架5 基本上每个控制器操作结果按登录用户的公司 ID 过滤数据库结果 我刚刚开始实现存储库模式来返回模型 而不是直接从控制器过滤 DbContext 将companyID传递到存储库中以过
  • 使用 URL 参数 ID 编号范围进行 HTACCESS 重定向

    我希望有人可以提供帮助 因为事实证明这很难弄清楚 我试图通过 HTACCESS 和 mod rewrite 重定向许多 URL 参数 ID 值在特定范围内 从 1 到 7603 的页面 这是我到目前为止所拥有的
  • 如果字符串包含数字,则仅返回字符串中的数字

    例如 字符串是abc123CD需要找到一种只读方法numbers在字符串中i e select a postgres function abc123CD Result 123 My try select substring abc123CD

随机推荐