【问题标题】:Gave regex for allowing only alphabets and a space but its not validating for numpad给正则表达式只允许字母和空格,但它不验证小键盘
【发布时间】:2021-10-22 19:36:51
【问题描述】:

虽然我已经给出了正则表达式来命名它允许的数字键盘数字。手机号码字段中的类似问题,尽管我给出了正则表达式,但它允许特殊字符。为什么这不起作用?任何帮助将不胜感激

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()
            }
        }


    })
})

【问题讨论】:

  • [a-zA-Z\s]+ 这是只匹配字母和空格的正则表达式。
  • @DedaDev 我在 keydown() 期间比较每个键,这就是为什么我省略了“+”号。但是我也尝试过,结果是一样的。出于某种原因,它允许使用小键盘数字

标签: javascript html css regex validation


【解决方案1】:

Regex 表达式似乎不会阻止数字键盘。如果你想在小键盘上屏蔽 0-9,我建议你检查 96 到 105 的代码。

防止小键盘:

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

使用event.key 获取实际密钥,这样正则表达式数字将不接受字母或特殊字符。

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

【讨论】:

  • 是的,这适用于不允许在名称字段中使用小键盘。谢谢你。但是我也面临着一个类似的和奇怪的问题,正则表达式只允许数字键。我给了它 [0-9] ,但它也允许键盘上 0-9 键上方的特殊字符。你对此也有什么建议吗?因为像&这样的一些字符没有键码。我想知道为什么没有很多人问这个
  • 使用event.key 这样您就可以正确地测试正则表达式编号,它应该可以解决您的问题。我更新了答案,将其作为您遇到的数字和特殊字符问题的解决方案。
  • 非常感谢!!这实际上修复了它
  • 太棒了!很高兴我能得到帮助!
猜你喜欢
  • 2013-03-26
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2016-02-21
  • 2022-01-14
相关资源
最近更新 更多