与jQuery的HTML的输入值,预防(Preventing values in html inpu

2019-09-19 00:14发布

如何防止用户在输入框中改变字符串,如果用最新的按键该输入的价值不通过正则表达式?

我看到各种关于如何使用按键用于测试单个字符的例子,但我需要整个价值相匹配的正则表达式,而不仅仅是键按下它们。

例如,文本框需要顺应以下正则表达式:

"^023-[0-9]{0,7}$"

所以,如果他们想改变"023""23" ,它应该停止他们时,他们删除0字符。 这同样适用于删除真实-023 。 还应该阻止他们,一旦他们进入后超过7号023这不能模糊完成。 它必须每次击键后进行。 性能是不是一个问题。

如果我使用按键()事件jQuery中,并得到这样的输入元素的值:

$(this).val()

然后,我将只能得到价值,他们按下键之前 - 而不是之后。 因此,有没有办法来测试对我的正则表达式的输入。 我不能简单地追加按下此字符串关键,因为我不能作一个假设,他们只是在字符串的最右侧进入键

我已研究过的keydown / KEYUP事件,虽然KEYUP似乎给我输入的电流值,用户按下一个键后,我发现很难去除的,他们键入的内容......该按键的作用()不会有一个问题,显然。

var regex = new RegExp("^023-[0-9]{0,7}$");

$("#number").keyup(function(event) {
    var number = $(this).val();

    if(!regex.test(number)) {
        event.preventDefault();

        return false;
    }
});

上面的代码是行不通的。 看来按键()给我停下来,他们键入的内容的能力,但KEYUP让我得到的电流值的能力。 我需要一个解决方案,它都;)

真正的问题来自浏览器没有MVC架构的事实造成的。 该模型视图。 不幸的是,我们无法验证更新后的模型视图更新之前......因为我们需要一个keyup事件期间更新视图,以获取更新的模型数据......到那时候,为时已晚,以防止他们更新视图,因为它已经被更新。

Answer 1:

这个怎么样:

var prevValue = "";
$("#number").keydown(function(e) {
   prevValue = $(this).val();
});

$("#number").keyup(function(e) {
...
   if(!regex.test(number))
      $(this).val(prevValue);
      // show error or other processing you need to do
});


Answer 2:

尝试这个:

var pattern = new RegExp("^023-[0-9]{0,7}$");

$("#number").change(function(e){
if (!pattern.test($(this).val())) {
      return false
    }
})


Answer 3:

event你有参数将包含你正在处理事件的所有细节。 这将包括被按下的键。

值得注意的是, keydownkeyup事件将返回按下的键,而keypress返回输入的字符可能是您更好的选择。

:看到这里的帮助页面http://api.jquery.com/keypress/了解更多详情。

综上所述,虽然event.which应该做你想要什么。 您可以结合起来,与文本框的初始值,并从获得新的价值。 如果不是有效的,则取消该事件,如果是有效的,那么让它去...



Answer 4:

如果你可以使用jQuery验证插件,您可以创建自定义验证器来匹配您的正则表达式。 然后,所有你需要做的就是映射验证该输入。 你仍然需要验证在服务器端,但你可能已经这样做。



Answer 5:

要做到你想要什么,在jQuery的插入符插件是必需的。 请注意,您需要从文件的开头删除评论(或至少将它们移动)或字节顺序标记的代码的开始会导致错误 。

所以,你需要做的是捕捉按键,在字符串在正确的位置插入字符,检查是否新的字符串是有效的,然后要么显示新插入或没有。 我认为有以下做你需要的东西:

$(document).ready(function(){
    var regex = new RegExp("^023-[0-9]{0,7}$");
    var caretpos;

    $('#number').keypress(function(event){
        // get the caret position
        caretpos = $(this).caret().start;
        //split the current value according to where the caret is
        valuestart = $(this).val().substring(0,caretpos);
        valueend = $(this).val().substring(caretpos);
        // insert the fired character into the string
        valuetocheck = valuestart + String.fromCharCode(event.which) + valueend;
        // check if the proposed new value passes the regex
        if (!regex.test(valuetocheck)) {
            // failed, prevent the character being shown
            event.preventDefault();
        }
    });
});

我在FF,Chrome浏览器,Safari浏览器,Opera和IE9的最新版本测试了这个。 在FF和Opera,光标按键被完全忽略,而他们移动插入符号像往常一样在其他浏览器,所以你可能要添加一些代码,以确保为一致的行为。 您可能还需要添加一些代码来处理会发生什么,如果用户选择了一些字符,而不是仅仅点击进入输入。 jQuery的插入符号插件必须在使用实例的选择。



文章来源: Preventing values in html inputs with jQuery