Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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_Regex - Fatal编程技术网

JavaScript替换正则表达式:(

JavaScript替换正则表达式:(,javascript,regex,Javascript,Regex,我想在输入电话号码时替换无效字符 我想要的规则如下 第一个字符可以是“+” 其余字符必须是数字0-9 这就是我已经拥有的 phoneNumber.getValue().replace(/[^0-9,+]+/g, ""); 这是可行的,但并不完全有效 但是,我可以在字符串中的任何位置使用“+” 如果这不是第一个角色,我想删除它。现在有人知道怎么做吗 谢谢 AJ做一个稍微聪明一点的正则表达式 phoneNumber.getValue().replace(/.*(?=\+)|[^0-9]/g,

我想在输入电话号码时替换无效字符

我想要的规则如下

  • 第一个字符可以是“+”
  • 其余字符必须是数字0-9
这就是我已经拥有的

phoneNumber.getValue().replace(/[^0-9,+]+/g, ""); 
这是可行的,但并不完全有效

但是,我可以在字符串中的任何位置使用“+” 如果这不是第一个角色,我想删除它。现在有人知道怎么做吗

谢谢
AJ

做一个稍微聪明一点的正则表达式

phoneNumber.getValue().replace(/.*(?=\+)|[^0-9]/g,'')
这种正则表达式滥用了替换中的交替从左到右工作的事实。因为
+
在第一次交替中已经被前瞻“覆盖”,它实际上不会被
[^0-9]
部分删除。

另一个将被删除

phoneNumber.getValue().replace(/[^\+0-9]/g, '')
当使用“+1234abc+5678”作为值时,结果是“+1234+5678
而Niet the Dark Absol的正则表达式导致“+5678

可能您必须使用子字符串将其合并以删除第二个加号。
这将非常简单。

假设您不想包含逗号(即结果应该是小数位数,前面加一个可选的
+
),那么这将完成:

phoneNumber.getValue().replace(/(^\+)|\D++/g,$1');
注:

  • 使用
    \D
    非十进制数字字符类速记。(即
    \D
    与:
    [^0-9]
    相同)
  • 利用这样一个事实,即当捕获组不参与匹配时,它仍然可以在替换字符串中被引用(替换为空字符串)

你知道我需要如何避免这个错误才能正确工作吗对不起,我的错误,我有一个错误,如果我输入+56465454+884,它将删除第二个加号之前的所有内容。理想情况下,我希望它只删除第二个加号plus@AndrewJackson这将需要更复杂的代码;)因为我不知道您在哪里使用此代码,对于Dynamics CRM,我希望能够验证输入的电话号码,但首先我只想确保我只处理数字和国家/地区代码前面的可选加号,希望这有意义,还感谢您迄今为止的帮助。如果您可以使用
match
而不是
replace
,请尝试
。match(/^\+?[0-9]+$/)