【问题标题】:Block user from input with regex使用正则表达式阻止用户输入
【发布时间】:2015-09-03 21:26:28
【问题描述】:

我有一个函数可以检查带有正则表达式字符串的输入框的最大值。 3 个单词和两个空格。

    $('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);
    });

当正则表达式应用于输入值时,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, ""));
}

但它会“杀死”所有空格。我只想删除最后的空格。有什么想法吗?

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

使用

将输入设置为禁用
$('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">

Fiddle

【讨论】:

  • 这是行不通的,因为它会完全禁用文本框,因此用户将无法编辑文本。作者明确表示“防止用户再在输入框中输入内容”。
  • @some-non-descript-user 它应该类似于将输入字段中的字符串设置为 send_text 字符串的值,每次用户向其中添加一些正则表达式不可接受的内容。如果用户删除了某些东西,它应该像正常一样做出反应
  • 我明白了。当然,禁用不是一种选择。也许我可以在今天晚些时候想出一些东西(如果没有人比我做得好的话)。
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2010-10-22
  • 1970-01-01
相关资源
最近更新 更多