4

我有一个textarea用户可以在其中输入或粘贴其他人的电子邮件地址,并在按下提交按钮后向他们发送邀请。每封电子邮件必须用逗号分隔,并且在提交表单之前有效 - 验证由jQuery Validate 插件多电子邮件方法处理

问题

有些人直接从他们的电子邮件客户端粘贴电子邮件地址,这些电子邮件通常采用奇怪的格式 - 在实际电子邮件之前包含姓名和姓氏,或者电子邮件被包裹在 < > 中。例如: "The Dude" <the.dude@gmail.com>, "The Dudette" <thedudette193@gmail.com>

问题

我想要做的是使用 jquery 从批量文本中提取所有电子邮件地址,但是我在集成这段代码以与我一起工作时遇到问题textarea- 我不知道从哪里开始。

我如何使用上述答案中的代码来提取输入textarea逗号后或焦点移开时输入的每封电子邮件textarea?因此,如果我在其后粘贴"The Dude" <the.dude@gmail.com>并键入,或将焦点移开,输入的值将变为the.dude@gmail.com.

4

3 回答 3

3

您可以使用事件处理程序检测何时更改文本区域(或其他输入字段)。Jquery 支持多个事件(看看这里http://api.jquery.com/category/events/)。在这种特殊情况下,我应该使用 keyup 事件来触发 extractEmails 函数。这样你的提取将是“活的”。但是,也可以通过捕获模糊或更改事件来实现。

使用 keyup 事件处理程序

http://jsfiddle.net/kasperfish/9hLtW/5/

$('#text').on('keyup',function(event) {
    emails=extractEmails($(this).val());
    $("#emails").text(emails);
});

function extractEmails (text)
{
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}
于 2013-10-04T11:15:12.760 回答
3

我猜是这样的:

var textarea = $('#emails');

textarea.on({
    keyup: function(e) {
        if (e.which === 188) check();
    },
    blur: check    
});

function check() {
    var val  = $.trim(textarea.val()),
        err  = '';

    if (!val.length) {
        err = 'No input ?';
        return;
    }

    var emails   = val.split(','),
        notvalid = [],
        temp     = [];

    $.each(emails, function(_,mail) {
        mail = $.trim(mail);
        if ( mail.length ) {
            var m = mail.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
            if (m) {
                temp.push(m);
            }else{
                temp.push(mail);
                notvalid.push(mail)
            }
        }else{
            temp.push(mail);
        }
        if (notvalid.length) err = 'Not valid emails : ' + notvalid.join(', ');
    });

    $('#error').html(err);
    textarea.val((temp.length ? temp : emails).join(', '));
}

小提琴

于 2013-10-04T11:36:02.320 回答
1

当您失去焦点或输入逗号时,这将按照您的要求将输入的文本转换为电子邮件:

function extractEmails (text)
{
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}

$("#emailtext").on('keypress blur', function(e) {

    if (e.which === 44 || e.type =="blur")
    {
        $('#emails').text(extractEmails($("#emailtext").val()));
    }
});

这是小提琴:

http://jsfiddle.net/Mj2KM/

于 2013-10-04T11:38:45.397 回答