我正在编写电话号码验证。我需要允许用户仅在输入字段的开头写入 +
字符,并防止用户稍后在该字段中写入。
换句话说:
+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 fiddle和 regex demo .
模式更新为 (.)\++
替代。 (.)
将除换行符之外的任何字符捕获到第 1 组,后跟一个或多个加号,并且第 1 组的内容在替换期间在 $1< 的帮助下放回原处
反向引用。
关于Javascript 字符串验证。如何在字符串中只写一次字符并且只在开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36058031/