【问题标题】:jQuery to prevent user from inputting if regular expression is not matched by using preventdefault如果使用 preventdefault 正则表达式不匹配,jQuery 会阻止用户输入
【发布时间】:2020-02-04 09:31:11
【问题描述】:

每次用户输入时,都会使用正则表达式检查值,如果不匹配正则表达式,我会尝试限制用户进一步进入输入字段

使用 keyup 事件,preventdefault 永远不会触发,使用 keypress 事件,用户根本无法输入,因为在开始时,输入字段中的值显示为“”(无)

var discountRegex = /(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{1,2})?)$/
            $("#" + (idOfElement)).on("keyup",function (e) {

                var val=this.value
                var k = e.keyCode
                if(k==46 ||(k > 48 && k <97)){
                    console.log(k)
                    return discountRegex.test(val);
                }

            });

在上面的代码中,idOfElement 是我在我关注的任何字段上得到的 id。

【问题讨论】:

    标签: javascript jquery regex preventdefault


    【解决方案1】:

    请参考示例代码。如果输入键无效,输入将不接受。也请在评论中找到相同的小提琴。

    <input type="text">
    
    
    $(document).ready(function(){
      $("input").bind('keypress', function(e) {
      var str = e.keyCode;
      if (/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{1,2})?)$/.test(str)) {
              alert('Invalid')
           e.preventDefault();
        } else {
           alert('Valid');
        }
    });
    }); 
    

    【讨论】:

    • 我的答案的小提琴链接jsfiddle.net/shivpatne/gpx3f6Lu
    • 上述正则表达式是针对小于 100 的值,最多只能接受 2 个小数点
    • 您可以将其替换为所需的正则表达式
    • 您在正则表达式接受小于 100 且最多 2 个小数点的值方面需要帮助吗?
    【解决方案2】:

    您可以检查正则表达式是否匹配,如果不匹配,您可以删除最后一个字符,如下例所示

    我用 keydown 示例更新了代码

    Example

    【讨论】:

    • 有没有办法像keyPress一样取消事件?
    • 我更新了代码。您使用函数 String.fromCharCode 从 keycode 中获取字符,然后返回正则表达式的结果
    • 以上代码也接受特殊字符,请帮我代码
    • 你可以使用 keypress 和 remove if with key evaluation。为什么要添加此声明?
    • 因为这两种方法都不起作用,我也尝试了 keypress 和 keyup
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2020-09-19
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多