Javascript 字符串验证。如何在字符串中只写一次字符并且只在开头?

标签 javascript jquery regex string validation

我正在编写电话号码验证。我需要允许用户仅在输入字段的开头写入 + 字符,并防止用户稍后在该字段中写入。

换句话说:

+11111111 - 对,

111111111 - 对,

+111+111+ - 错误,

1111+111+ - 错误

问题是我需要在输入时执行验证。结果我无法在提交后分析整个字符串,因此无法获取 + 字符的位置,因为“keyup”始终返回 0

我尝试了很多方法,这是其中之一:

  $('#signup-form').find('input[name="phone"]').on('keyup', function(e) {
        // prevent from typing letters
        $(this).val($(this).val().replace(/[^\d.+]/g, ''));

        var textVal = $(this).val();

        // check if + character occurs
        if(textVal === '+'){
          // remove + from occurring twice
          // check if + character is not the first
          if(textVal.indexOf('+') > 0){
             var newValRem = textVal.replace(/\+/, '');
             $(this).val(newValRem);
          }

        }
});

当我试图用空字符串替换 + 字符时,它只被替换一次,这还不够,因为用户可能会错误地输入它很多次。

这是 fiddle 的链接:https://jsfiddle.net/johannesMt/rghLowxq/6/

在这种情况下请给我任何提示。谢谢!

最佳答案

为了帮助您解决当前的代码修复问题(@Thomas Mauduit-Blin is right,除了只允许在开头使用加号之外,这里还有很多工作要做),您可以删除前面有任何字符的任何加号。只需捕获该字符并在替换模式中使用反向引用进行恢复:

$(this).val($(this).val().replace(/[^\d.+]|(.)\++/g, '$1'));

参见 updated fiddleregex demo .

模式更新为 (.)\++ 替代。 (.) 将除换行符之外的任何字符捕获到第 1 组,后跟一个或多个加号,并且第 1 组的内容在替换期间在 $1< 的帮助下放回原处 反向引用。

关于Javascript 字符串验证。如何在字符串中只写一次字符并且只在开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36058031/

相关文章:

jquery - 使用 jQuery 将适当的斑马条纹应用于附加的 DOM 元素

regex - sed 在 mac 地址中插入冒号

javascript - jQuery 正则表达式返回意外结果

regex - PostgreSQL:如何从另一列的 json 值替换为一列?

javascript - javascript + css 的 Safari 问题

javascript - 设置chart.js条形图的最大值

jquery - 在鼠标悬停时更改 css 类

javascript - 使用脚本应用和更改所选 radio 的类名

javascript - 在组件内使用全局定义的脚本

javascript - 如何在ajax请求后重新加载所有javascript?