在正则表达式中只允许加号(+)一次

时间:2016-07-09 18:02:41

标签: javascript regex

我是正则表达式的新手,并希望在正则表达式中只允许加号(+)一次。如果可能,请用简单的词语解释



function number(){
  var i = document.getElementById("number");
  i.value = i.value.replace(/[^0-9]/+/g,"");
}

<input type="text" id="number" onkeyup="number()" />
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

由于+是RegEx中的量词字符,如果您要在字符串中测试文字+,则必须将其转义:\+。< / p>

如果您只想用一个加号替换多个加号的序列,可以使用此RegEx:/\++/g。第一部分\+是文字+。第二部分+是RegEx控件,用于匹配前面的一个或多个。因此,此RegEx将与一个或多个加号匹配,然后以下字符串替换将仅用一个加号替换它。 (1234++将成为1234+

&#13;
&#13;
function number(){
  var i = document.getElementById("number");
  i.value = i.value.replace(/\++/g, '+');
}
&#13;
<input type="text" id="number" onkeyup="number()" />
&#13;
&#13;
&#13;

编辑:如果你想删除除第一个以外的所有加号,你可以在.replace函数的第二个参数中使用一个函数,如下所示:

Edit2:您还可以使用空字符串替换+来删除所有非数字或/[^0-9\+]/g字符:

&#13;
&#13;
function number(){
  let first = true;
  var i = document.getElementById("number");
  i.value = i.value
    .replace(/[^0-9\+]/g, '')
    .replace(/(\+)+/g, function(match, p1) {
      if(first) {
        first = false;
        return p1;
      }
      else return '';
    });
}
&#13;
<input type="text" id="number" onkeyup="number()" />
&#13;
&#13;
&#13;

2+44a5+++444+++变为2+445444