下面的JS regex正在按预期工作
/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d+)\)?)[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i
但是,当我使用它作为HTML 5模式时,我得到了以下错误:
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不是我真正的力量。
发布于 2022-08-16 10:26:30
regex和regex字符串是两种不同的东西。
Regex示例:
/[a-zA-Z\d]+/.test('abc123')
等效的正则表达式字符串示例:
new RegExp('[a-zA-Z\\d]+').test('abc123')
字符串中的反斜杠转义后面的字符。对于许多字符来说,它是不操作的,就像在'\d'
字符串中一样,这相当于'd'
。因此,您需要指定一个双反斜杠来获取可以在正则字符串中使用的\d
,以表示一个数字。
在HTML5中使用示例验证输入:
<input type="text" name="uname" pattern="[a-zA-Z\d]+" minlength="4" maxlength="10" />
因此,在您的情况下,请确保在regex字符串中转义反斜杠:
"^(?:(?:\\(?(?:00|\\+)...
在pattern属性中,您不能指定修饰符i
来忽略大小写,例如,您需要调整regex字符串本身,使其不区分大小写。
HTML属性上的文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern
发布于 2022-08-16 02:51:20
从示例复制的JS Regex输入:
/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d+)\)?)[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i
从示例复制的HTML5 Regex错误输出:
//^(?:(?:(?(?: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访问它,则仍然希望通过用\
替换它们来转义您的\\
。
https://stackoverflow.com/questions/73372011
复制相似问题