Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式|模式属性值不是有效的正则表达式:未捕获的语法错误:无效的正则表达式_Javascript_Html_Regex_Validation_Input - Fatal编程技术网

Javascript 正则表达式|模式属性值不是有效的正则表达式:未捕获的语法错误:无效的正则表达式

Javascript 正则表达式|模式属性值不是有效的正则表达式:未捕获的语法错误:无效的正则表达式,javascript,html,regex,validation,input,Javascript,Html,Regex,Validation,Input,我通过javascript将一些正则表达式字符串注入到输入元素的模式属性中(取决于上下文之外的一些形式更改),它可以按预期工作,但问题是,当我第一次关注输入时,它会将错误记录到控制台 正如您在下面看到的,我试图转义正则表达式,但是HTML输入无法根据之前使用的模式验证相应的值 必需的正则表达式代码 (\(?([\d\)\–+\/\(]+){6,}\)([.\-–\/]?)([\d]+) 这就是我通过JS定义和注入它的方式 /([\d\-\)–+\/\(]+){6,}\)([.\-–\/]?)([

我通过javascript将一些正则表达式字符串注入到输入元素的模式属性中(取决于上下文之外的一些形式更改),它可以按预期工作,但问题是,当我第一次关注输入时,它会将错误记录到控制台

正如您在下面看到的,我试图转义正则表达式,但是HTML输入无法根据之前使用的模式验证相应的值

必需的正则表达式代码

(\(?([\d\)\–+\/\(]+){6,}\)([.\-–\/]?)([\d]+)

这就是我通过JS定义和注入它的方式

/([\d\-\)–+\/\(]+){6,}\)([.\-–\/]?)([\d]+)/g

下面是我在试图为HTML模式属性转义它时尝试和失败的内容

([\d\)–+/(]+){6,}\)([.-–/])([\d]+)

我真的在寻找一种方法来实现所有这些,而不出现任何错误:

  • 正则表达式将在JS中用于
    与输入值匹配,并且仅在有效时才继续
  • 它还将在HTML中用作模式属性,以向用户提供有关输入验证的反馈,希望不会出现类似这样的错误<代码>模式属性值/(\(?([\d\-)\–+/\(]+){6,}\)([.\-–\/])([\d]+)/g不是有效的正则表达式:未捕获的语法错误:无效的正则表达式:/(?([\d\-)\–+/\(]+){6,}\([.-–+/])([\d]+)/g/:无效的转义

正则表达式本身并没有很好地验证电话号码,但由于您对该模式感到满意,请参见下面的JS和HTML5模式属性中应该如何使用它

在JS中,您需要使用

var rx=/^\(?[\d+\/()–-]{6,}\)?[.\/-]?\d+$/;
//试验

控制台日志(接收测试(“02162-54914479”)在任何转义之前,您的
([\d\-\)\-\+\/\(]+){6,}
没有任何意义。在char类中匹配一个或多个char 6次或多次。模式应该匹配什么?要验证字符串,您需要使用
^your_pattern$
,添加锚。响应@WiktorStribiż的Thnx新模式应该与regex完全匹配(它地址类似于这些德国电话号码)。我对regex很满意,但我的输入模式属性不是:syyou need
/^(?[\d+\/()–]{6,})在
String#match
pattern=“\(?[\d+\/()–]{6,}\)?[.\/-]?\d+$/
中,
为什么?它解决了我的需要。我很想听听你的建议,这将与模式属性很好地工作。谢谢你的时间。我会接受你的回答,但我真的想知道我的表单有什么问题,因为我在控制台
模式属性值(?[d+/()–]{6,})?[./-]?d+不是有效的正则表达式:未捕获的语法错误:无效的正则表达式:/(?[d+/()–]{6,})?[./-]?d++:无效组
对应html和JS代码在这里:在那里,您需要
pattern=“\s*[A-Za-z]+(?:(?:[,]?|[-'])[A-Za-z]+\。?\s*”
用于
名称
phonePattern=newregexp(/^\(?[\d+\/()–-]{6,}\)?[.\/–-]?\d+$/)必须声明为
const phonePattern=/^\(?[\d+\/()–-]{6,}\)?[.\/–-]?\d+$/。和
let resolution=inputValue&&!!inputValue.match(this.phonePattern)
必须是
let resolution=inputValue&&this.phonePattern.test(inputValue),但主要的问题是
inputEl.setAttribute('pattern',
(?[\d+\/()–-]{6,})?[.\/-]?\d+
,它必须是
inputEl.setAttribute('pattern',“\\(?[\\d+/()–-]{6,}\\)?[./-]?\\d+”。再见,谢谢!这种模式现在很有魅力。既然你对正则表达式有很好的了解,我可以问你为什么我们要改变模式的正则表达式字符串吗?背后的动机是什么,欢迎任何链接文章。再次,非常感谢Wiktor!一个接一个地问我一个问题,可能是在聊天时。这里的东西太多了。事实上,我不明白你所说的为什么我们必须更改模式的正则表达式字符串。我改为
^\(?[\d+\/()–-]{6,}\)?[.\/–-]?\d+$
,因为字符类末尾的连字符不必转义,
(a+{6,}
没有意义,必须使用锚点才能将正则表达式应用于整个字符串。