1

我希望我提交的电子邮件表单由 jQuery 验证。

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

前任。如果我输入

abc.com不在数组中。那么好吧。

bbb.net在数组中。歌曲。

username@ccc.co.uk字符串的一部分在数组中。歌曲。

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在数组中,也能通过验证。

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

4

3 回答 3

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;
    }
});

检查小提琴

于 2013-06-03T06:25:35.637 回答
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.
    }
  });
于 2013-06-03T06:28:13.500 回答
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;
    }
});
于 2013-06-03T06:30:43.720 回答