jQuery如果表单字段的值的一部分匹配数组中的值,那么

时间:2013-06-03 06:16:20

标签: javascript jquery

我希望我的电子邮件表单可以通过jQuery验证。

如果用户输入的val()匹配数组中的任何值,我想在提交之前运行一些函数。

离。 如果我输入

abc.com不在数组中。好的。

bbb.net在数组中。所以NG。

username@ccc.co.uk字符串的一部分在数组中。所以NG。

blah@aaa.ne.我不在乎......让PHP决定是否有效的电子邮件。所以javascriptly OK。

HTML:

<form action="./" method="post" id="test">
email address: <input type="text" id="mail">

<input type="submit" val="SUBMIT " id="subm">
</form>

的javascript:

var arr = [
'aaa.ne.jp', 'bbb.net', 'ccc.co.uk', 'ddd.co.kr'
];

$('#test').on('submit', function() {
var _value = $('#mail').val();
if( $.inArray(_value, arr) > 0 || _value == '') {
    console.log(_value + ' cant be accepted');
    return false;
} else {
    console.log(_value + ' is GO!');
    return false;//do not submit just for the sake of example.
}
});

JSFIDDLE

我使用了jquery的inArray()方法,但不知何故,例如,即使username@ccc.co.uk在数组中,ccc.co.uk也会通过验证。

任何解决方案将不胜感激。感谢名单。

3 个答案:

答案 0 :(得分:1)

尝试splitting the email并在@

之后比较后一部分
var arr = [
    'aaa.ne.jp', 'bbb.net', 'ccc.co.uk', 'ddd.co.kr'];

$('#test').on('submit', function () {
    var _value = $('#mail').val();
    if (_value !== '' && _value.indexOf('@') > -1) {
        var parts = _value.split('@');
        if ($.inArray(parts[1], arr) > 0 || _value == '') {
            console.log(_value + ' cant be accepted');
            return false;
        } else {
            console.log(_value + ' is GO!');
            return false; //do not submit just for the sake of example.
        }
    } else {
        console.log(_value + ' cant be accepted');
        return false;
    }
});

<强> Check Fiddle

答案 1 :(得分:0)

您要比较的电子邮件值包含更多字符,这些字符表示inArray()方法的工作原理。这不是直接的比较。你可以做到这一点。它会在'@'之后获取所有内容,以便在$ .inArray中进行比较。

$('#test').on('submit', function() {
    var _value = $('#mail').val();
    var _value2 = _value.split("@").pop();
    if( $.inArray(_value2, arr) > 0 || _value2 == '') {
        console.log(_value + ' cant be accepted');
        return false;
    } else {
        console.log(_value + ' is GO!');
        return false;//do not submit just for the sake of example.
    }
  });

答案 2 :(得分:0)

您可以使用grep

var arr = [
    'aaa.ne.jp', 'bbb.net', 'ccc.co.uk', 'ddd.co.kr'];

$('#test').on('submit', function () {
    var _value = $('#mail').val(),
        _matches = $.grep(arr, function (val, i) { 
                       return _value.indexOf(val) != -1 
                   });

    if (_matches.length > 0) {
        //contains something
    } else {
        console.log(_value + ' cant be accepted');
        return false;
    }
});