string.replace在Firefox中不起作用?

时间:2014-03-12 00:35:39

标签: 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, '')。这应该从电话号码中删除任何空格()-个字符。

2 个答案:

答案 0 :(得分:3)

正如@dandavis在评论中所说,逃避破折号的工作原理(不需要逃避括号)。

如果您尝试运行代码

/[()-\s]+/

你得到了

SyntaxError: invalid range in character class

这是因为Firefox试图将短划线用作范围字符,而不是破折号。

要解决此问题,您可以:

  • 逃离破折号:/[()\-\s]+/
  • 将短划线放在开头或结尾处:/[-()\s]+//[()\s-]+/

答案 1 :(得分:0)

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

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