给出了只允许字母和空格的正则表达式,但它不验证numpad



虽然我已经给出了regex的名称,它允许numpad数字。类似的问题在手机号码领域,它允许特殊字符,虽然我已经给出了正则表达式。为什么这不起作用?如有任何帮助,不胜感激

let namecheck = false;
let mobcheck = false;
$("#fname").keydown(function (ev) {
var namekey = String.fromCharCode(ev.which);
var input = this.value
var prev = input.length - 1
let nameregex = /^[A-Za-z ]$/
if (ev.which != 8 && ev.which != 46) {                 //to allow backspace and del
if (!nameregex.test(namekey) || (input[prev] == " " && namekey == " ")) {
ev.preventDefault();
}
}
if (input.length < 2) {
namecheck = false
$("#error1").text("Enter at least 3 characters")
}
else {
$("#error1").text("")
namecheck = true
}
})
$("#fmob").keydown(function (ev) {
let mobkey = String.fromCharCode(ev.which)
let mob = this.value;
let mobregex = /^[0-9]$/
if (ev.which != 8 && ev.which != 46) {                 //to allow backspace and del
if (!mobregex.test(mobkey)) {
ev.preventDefault()
}
}
if (mob.length < 9) {
$("#error2").text("Mobile number should be at least 10 digits")
mobcheck = false
}
if (mob.length == 9) {
$("#error2").text("")
mobcheck = true
}
if (mob.length == 10) {
if (ev.which != 8 && ev.which != 46) {
ev.preventDefault()
}
}

})
})

Regex表达式似乎不会阻止numpad。如果你想在numpad上阻止0-9,我建议你检查代码96到105。

防止数字键盘:

if (ev.which >= 96 && ev.which <= 105) {
ev.preventDefault();
}

使用event.key获取实际的键,这样regex数字将不接受字母或特殊字符。

const key = ev.key
const numberReg = /^[0-9]$/
if(!numberReg.test(key)){
// prevent letters and special cahracters
ev.preventDefault()
}

最新更新