Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么regex在javascript中工作,而不是以HTML5模式工作

为什么regex在javascript中工作,而不是以HTML5模式工作
EN

Stack Overflow用户
提问于 2022-08-16 01:47:17
回答 2查看 55关注 0票数 -1

下面的JS regex正在按预期工作

代码语言:javascript
运行
AI代码解释
复制
/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d+)\)?)[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i

但是,当我使用它作为HTML 5模式时,我得到了以下错误:

代码语言:javascript
运行
AI代码解释
复制
Pattern attribute value /^(?:(?:(?(?:00|+)([1-4]dd|[1-9]d+))?)[-. \/]?)?((?:(?d{1,})?[-. \/]?){0,})(?:[-. \/]?(?:#|ext.?|extension|x)[-. \/]?(d+))?$/i is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: //^(?:(?:(?(?:00|+)([1-4]dd|[1-9]d+))?)[-. \/]?)?((?:(?d{1,})?[-. \/]?){0,})(?:[-. \/]?(?:#|ext.?|extension|x)[-. \/]?(d+))?$/i/: Invalid group

浏览器告诉我“未登录的SyntaxError:无效的正则表达式。无效的组”

任何帮助都将是非常感谢的,因为regex不是我真正的力量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-16 10:26:30

regex和regex字符串是两种不同的东西。

Regex示例:

代码语言:javascript
运行
AI代码解释
复制
/[a-zA-Z\d]+/.test('abc123')

等效的正则表达式字符串示例:

代码语言:javascript
运行
AI代码解释
复制
new RegExp('[a-zA-Z\\d]+').test('abc123')

字符串中的反斜杠转义后面的字符。对于许多字符来说,它是不操作的,就像在'\d'字符串中一样,这相当于'd'。因此,您需要指定一个双反斜杠来获取可以在正则字符串中使用的\d,以表示一个数字。

在HTML5中使用示例验证输入:

代码语言:javascript
运行
AI代码解释
复制
<input type="text" name="uname" pattern="[a-zA-Z\d]+" minlength="4" maxlength="10" />

因此,在您的情况下,请确保在regex字符串中转义反斜杠:

代码语言:javascript
运行
AI代码解释
复制
"^(?:(?:\\(?(?:00|\\+)...

在pattern属性中,您不能指定修饰符i来忽略大小写,例如,您需要调整regex字符串本身,使其不区分大小写。

HTML属性上的文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern

票数 0
EN

Stack Overflow用户

发布于 2022-08-16 02:51:20

从示例复制的JS Regex输入:

代码语言:javascript
运行
AI代码解释
复制
/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d+)\)?)[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i

从示例复制的HTML5 Regex错误输出:

代码语言:javascript
运行
AI代码解释
复制
//^(?:(?:(?(?:00|+)([1-4]dd|[1-9]d+))?)[-. \/]?)?((?:(?d{1,})?[-. \/]?){0,})(?:[-. \/]?(?:#|ext.?|extension|x)[-. \/]?(d+))?$/i/

从外观上看,javascript正在读取反斜杠,就好像它们在转义字符一样。

从JS示例到HTML错误:

  • \d\d变成dd

没有识别转义字符的任何一个反斜杠,如d,另一个反斜杠等,都会被删除。

如果查看输入和结果错误,还会有更多的示例。

如果使用JS将此模式作为字符串传递给html DOM,则需要转义反斜杠。每当您的模式需要反斜杠时,您需要将其中的两个放在字符串中。第一个反斜杠告诉解释器,第二个反斜杠是文本的一部分,而不是转义序列。如果模式存储在标记中,就像您的示例一样,并且使用JS访问它,则仍然希望通过用\替换它们来转义您的\\

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73372011

复制
相关文章

相似问题

两个具有相同签名的接口

40

用不同的签名要求实现遗留接口的方法

20

Java:实现相同接口的类的组合

20

为什么我不能为请求接口的方法返回接口的实现?

10

接口方法签名契约以外的实现的正确性

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档