Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 string.replace在Firefox中不工作?_Javascript_Regex_Oracle Apex - Fatal编程技术网

Javascript string.replace在Firefox中不工作?

Javascript string.replace在Firefox中不工作?,javascript,regex,oracle-apex,Javascript,Regex,Oracle Apex,我的Oracle Apex 4.2页面中有许多动态操作,在电话号码输入字段上有“执行Javascript代码”操作: $s("P40_MOBILE_PHONE", $v("P40_MOBILE_PHONE").replace(/[()-\s]+/g, '')); 这适用于IE和Chrome。然而,在Firefox中,它不仅不能工作,而且会导致页面上的所有其他动态操作完全停止工作 此动态操作与其他动态操作之间的唯一区别似乎是使用了string.replace(/[()-\s]+/g',)。这应该

我的Oracle Apex 4.2页面中有许多动态操作,在电话号码输入字段上有“执行Javascript代码”操作:

$s("P40_MOBILE_PHONE", $v("P40_MOBILE_PHONE").replace(/[()-\s]+/g, ''));
这适用于IE和Chrome。然而,在Firefox中,它不仅不能工作,而且会导致页面上的所有其他动态操作完全停止工作


此动态操作与其他动态操作之间的唯一区别似乎是使用了
string.replace(/[()-\s]+/g',)
。这应该可以去掉电话号码中的任何空格、
-
字符。

正如@dandavis在一篇评论中所说的,对破折号进行转义是有效的(不过,不需要转义括号)

如果你试图运行代码

/[()-\s]+/
你得到

SyntaxError: invalid range in character class
这是因为Firefox试图将破折号用作范围字符,而不是破折号

要解决此问题,您可以:

  • 跳出破折号:
    /[()\-\s]+/
  • 将破折号放在开头或结尾:
    /[-()\s]+/
    /[()\s-]+/

为了便于将来参考,按如下方式更改正则表达式修复了该问题:

replace(/[\(\)\-\s]+/g, '')

请尝试\(\)和\-而不仅仅是()和-@dandavis,谢谢,这就解决了问题。如果你把它作为一个答案,我会把它标记为正确的。我不认为纠正一个打字错误会对其他人有多大好处;如果你这么说的话,对污染搜索的完整回答毫无意义。从我的角度来看,这不是一个拼写错误,我真的不知道你不能在正则表达式中引用这样的单个字符-因为它在IE和Chrome中工作,我从语法正确的假设开始。谷歌搜索,所以搜索没有帮助。如果我简化这个问题,它可能会对其他人有用,你不认为吗?字符类中的括号不应该转义。正如Oriol所指出的,这确实是短跑造成的问题;你已经解释了为什么它不起作用;你给了我一个在将来诊断类似问题的提示:)…当然,作为一个“安全比抱歉更好”的措施,但是如果你理解正则表达式字符类,这是不必要的!在这个问题之前,我真的不明白有时候你必须逃避这些角色,有时候你不必。我已经习惯了在这方面更加一致的语言。正则表达式语法是编码世界中为数不多的几乎通用的东西之一。当然,每种语言都有其独特之处和局限性,但其核心语法基本相同。这不是矛盾。。只是char类允许您使用连字符指定字符范围,例如
a-Z
。因此,为了将其与文字连字符区分开来,您必须按照公认的答案进行操作。如果要使用字符类,则必须在字符类中转义的其他字符只有
[]
,因为它们是字符类分隔符。同样,逃离定界符…是一件非常普遍的事情。这些是唯一需要逃避的事情,而且,这在正则表达式世界中是相当普遍的。然后那里有一个
\s
,但它是用来表示空格字符的,而不是用来生成文本s。同样,诸如
\s
\n
\t
之类的转义字符非常通用。我不是想对你发牢骚,所以如果你那样做,我向你道歉!我不是在贬义的意义上使用“不一致”这个词,只是在字面意义上。从字面上看,在正则表达式中(正如我今天学到的,是的!),未转义的
-
可以表示文字
-
字符,也可以表示一系列字符,具体取决于上下文。从这个意义上讲,它是不一致的——但当然它有定义良好的规则,任何正则表达式编写者都应该熟悉这些规则。