【发布时间】:2017-11-09 02:47:17
【问题描述】:
/^+{0,1}(?:\d\s?){11,13}$/ 这个正则表达式只允许 + 放在首位,只允许数字......
在按键上我希望用户首先只能输入 + 和上面正则表达式验证的数字但是代码总是转到 if part..为什么正则表达式在这种情况下不起作用
function ValidatePhone(phone) {
var expr = /^\+?(?:\d\s?){11,13}$/;
return expr.test(phone);
}
var countofPlus = 0;
$("#phone").on("keypress", function (evt) {
if (evt.key == "+")
{
countofPlus = countofPlus + 1;
if (countofPlus > 1 || this.value.length >= 1) {
return false;
}
else return true;
}
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && charCode != 43 && charCode != 32 && charCode != 40 && charCode != 41 && (charCode < 48 || charCode > 57))
return false;
return true;
});
$("#phone").on("keyup", function (evt) {
debugger;
if (evt.key == "+") {
countofPlus--;
return true;
}
});
【问题讨论】:
-
它可能不起作用,因为用户不能一键输入所需的最少 11 个字符...
-
这是一个非常奇怪且非用户友好的实现。 不要使用
keypress函数。例如,当焦点离开页面元素时,如果数字是意外格式,您可以在文本框上显示 警告。 (并在后端再次验证。) -
@le_m 我正在尝试使用此解决方案,但在 for let 循环中出现严重错误
-
@HDev007 你在为旧浏览器开发吗,IE?替换为
for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; ... }。还将event => { ... }替换为function(event) { ... }。并将let替换为var。
标签: javascript jquery regex validation