gpt4 book ai didi

Javascript RegExp 被解释为不同于字符串与数据属性

转载 作者:行者123 更新时间:2023-11-29 20:51:33 24 4
gpt4 key购买 nike

长话短说,我正在尝试“修复”我的系统,因此我在后端使用与前端相同的正则表达式(出于明显的安全原因验证双方)。我已经让我的正则表达式服务器端工作得很好,但是把它交给客户端是一件痛苦的事情。我最快的想法是简单地将它存储在标签的数据属性中,获取它,然后对其进行验证。

嗯,我,再想想! JS 让我陷入循环,因为显然 RegExp 会根据字符串的引入方式对字符串进行不同的解释。任何人都可以阐明这里发生的事情或我如何解决这个问题

HTML

<span data-regex="(^\\d{5}$)|(^\\d{5}-\\d{4}$)"></span>

Javascript

new RegExp($0.dataset.regex)
//returns /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/

new RegExp($($0).data('regex'))
//returns /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/

new RegExp("(^\\d{5}$)|(^\\d{5}-\\d{4}$)");
//returns /(^\d{5}$)|(^\d{5}-\d{4}$)/

请注意前两个,如果我动态地从数据属性中提取值,RegExp 的构造函数出于某种原因无法正确解释双斜线。但是,如果我将值复制并粘贴为字符串并对该值调用 RegExp,它会正确解释双斜杠并以正确的模式返回它。

我也尝试过在服务器端不通过双斜杠转义 \d 字符,但正如您可能(或可能没有)猜到的那样,相反的情况发生了。当从属性/数据集中拉出时,\被完全删除,导致 Regex 认为我正在寻找“d”字符而不是数字。我无法理解 JS 在这里的想法。请发送帮助,互联网

最佳答案

您的数据属性有多余的反斜杠。无需转义 HTML 属性中的反斜杠,因此您实际上会在不需要的地方得到双反斜杠。当然,在 JavaScript 中将正则表达式编写为字符串时,您必须转义反斜杠。

所以实际上两边的字符串并不相同,只是因为转义的方式不同。

关于Javascript RegExp 被解释为不同于字符串与数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598970/

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