用正则表达式阻止用户输入

Block user from input with regex

本文关键字:用户 输入 正则表达式      更新时间:2023-09-26

我有一个函数,检查输入框与一个regex字符串的最大值。三个字加两个空格

    $('input.words_input__input_field').on("keyup", function(e) {
     if (e.keyCode == 13) {
         send_message();
     }
    var re = /^(((['''-'+'s]'s*[a-zA-Z])?[a-zA-Z]*)){3}$/g;
    var str = $('input.words_input__input_field').val();
    var m;
    while ((m = re.exec(str)) !== null) {
        if (m.index === re.lastIndex) {
            re.lastIndex++;
        }
        send_text = str;
        // View your result using the m-variable.
        // eg m[0] etc.
    }
    console.log(m);
    });

当Regex应用于输入值时,send_text将不再被编辑。但我想阻止用户在输入框中输入更多内容。

是否有办法为输入创建一个块,以便用户不能输入超过"允许"的正则表达式?

编辑:我对这个正则表达式有一些问题,所以它的工作太完美了,它应该只阻止用户在输入字段中输入三个单词和两个空格。我有一个这样的代码:

var test = /^(((['''-'+'s]'s*[a-zA-Z])?[a-zA-Z]*)){3}$/g;
if (test.test($(this).val())) {
    $(".input").val($(".input").val().replace(/'s/g, ""));
}

但是它"杀死"了所有的空格。我只想删除末尾的空格。什么好主意吗?

设置输入为disabled
$('input.words_input__input_field').prop('disabled', true);

或者将.val()存储在变量或数据对象中,只要它有效,如果不再满足正则表达式,则从那里重新生成它。

编辑:

下面的代码将允许用户键入3个以逗号分隔的单词。如果添加了违反正则表达式的任何内容,则输入将被重置为最后一个值。

var p;
var f;
$(".inp").on('keyup',function(e){
    var k = e.which;
    var i = $(".inp").val();
    if(k != 8 && k != 46){ // allow backspace and delete
        if(i.search(/^[A-Za-z]+ [A-Za-z]+ [A-Za-z]+$/) >= 0){
            f = true;
            p = i;
        }
        else{
            if(f){
                $(".inp").val(p);    
            }
        }
    }
});
<input type="text" class="inp">

小提琴