我正在尝试使用以下条件创建一个匹配数字的正则表达式: •长度12 •第一个字符必须是8 •其余11必须为数字0-9
这就是我正在尝试的,但它不起作用:
$(".ValidarTelefono").keypress(function (e) {
tecla = (document.all) ? e.keyCode : e.which;
if (tecla == 8) return true;
patron = /^8\d{12}$/;
te = String.fromCharCode(tecla);
return patron.test(te);
});
有人能告诉我哪里出错了吗?
答案 0 :(得分:2)
正则表达式似乎是正确的,但是 你正在测试单个字符,而不是整个字符串。
答案 1 :(得分:1)
尝试以下几点:
$(".ValidarTelefono").keypress(function (e) {
tecla = (document.all) ? e.keyCode : e.which;
if (tecla == 8) return true;
patron = /^8\d{11}$/;
var te = $(this).val() ;
return patron.test(te);
});
答案 2 :(得分:0)
我认为您正在寻找的是以下内容:
$(".ValidarTelefono").keypress(function (e) {
patron = /^8\d{11}$/;
if (patron.test($(this).val())) {
. . . DO SOMETHING . . .
}
else {
. . . DO SOMETHING ELSE . . .
}
});
该代码应该做的是检查字段的当前值是否是每次在字段中按下键时以12开头的12位数字。
您不希望返回.test()
的结果,因为每次失败时,都会阻止该字符进入该字段。
编辑:我发现你可能试图阻止任何不会导致创建12位字符的字符,以8开头。 。 。该代码会有所不同:
首先,通过添加maxlength = 12
属性来控制文本输入中的数字长度。
然后,使用以下代码检查字符:
$(".ValidarTelefono").keypress(function (e) {
var tecla = (document.all) ? e.keyCode : e.which;
if (tecla == 8) {
return true;
}
else {
var te = String.fromCharCode(tecla);
if ($(this).val().length === 0) {
return (te === "8");
}
else {
var patron = /\d/;
return patron.test(te);
}
}
});
话虽如此,这种方法存在一些 BIG 问题。你对用户的键盘操作有很多限制。他们可以使用Backspace
删除,但无法使用Delete
。 。 。无法使用箭头键或Home
或End
更改光标位置,他们无法使用Ctrl-V
粘贴有效值等。< / p>
我非常犹豫不决使用这种方法。
答案 3 :(得分:0)
Teléfono: <input class="ValidarTelefono">
$(".ValidarTelefono").keypress(function (e) {
var tecla = (document.all) ? e.keyCode : e.which;
if (tecla == 8) return true;
var patron = /^8[0-9]{0,12}$/;
var te = String.fromCharCode(tecla);
var v=$(this).val()+te;
console.log(v);
return patron.test(v);
}).on("blur",function(){
var patron = /^8[0-9]{12}$/;
if(!patron.test( $(this).val() )){
console.log('mal');
}else{
console.log('ok');
}
});