检查数组jquery中的字母

时间:2014-08-07 16:47:51

标签: javascript jquery arrays

我有一个示例代码,用于检查输入中的哪些用户类型在javascript数组中可用。

var postcodes = ["00-240", "80", "32", "90", "91"];
$('#test').keyup(function () {
    var val = this.value; 
    var m = $.map(postcodes, function (value, index) {
        var reg = new RegExp('^' + val + '.*$');
        return value.match(reg);
    });
    $('#msg').text(m.length && val.length ? 'VALID' : 'INVALID');
});

我想在用户输入时设置VALID:80-215,80-512,32-125等。 现在,如果我输入80或32,它的显示有效,但是当我写80-215或32-111时,它将显示无效。 我想检查数组中的某些字符串是否在字符串中可用,这是来自用户的请求(强调字母的顺序)。

我会感激任何提示。

此致

1 个答案:

答案 0 :(得分:0)

你有一些问题:

  • 从不受信任的字符串构建正则表达式时,必须转义special regex characters
  • 由于您要匹配以数组中的代码开头的字符串,您必须从每个数组条目构建正则表达式,而不是用户输入
  • 要测试是否存在某些匹配项,请更好地使用Array.prototype.some而不是Array.prototype.map
  • 文本字段可以通过键盘以外的其他方式更改,例如用鼠标粘贴。最好倾听input事件,而不是keyup一个。
var postCodes = ["00-240", "80", "32", "90", "91"],
    postRegExp = postCodes.map(function(code) {
        return new RegExp('^' + code.replace(/[.^$*+?()[{\\|]/g, '\\$&'));
    });
document.getElementById('test').oninput = function () {
    var val = this.value,
        m = postRegExp.some(function(regExp){
            return regExp.test(val);
        });
    document.getElementById('msg').innerHTML = m ? 'VALID' : 'INVALID';
};

但是,您可以尝试ES6 String.prototype.startsWith

,而不是正则表达式
var postCodes = ["00-240", "80", "32", "90", "91"];
document.getElementById('test').oninput = function () {
    var val = this.value,
        m = postCodes.some(code => val.startsWith(code));
    document.getElementById('msg').innerHTML = m ? 'VALID' : 'INVALID';
};