我有一个textarea
,用户可以在其中输入或粘贴其他人的电子邮件地址,并在按下“提交”按钮后向他们发送邀请。在提交表单之前,每封电子邮件必须用逗号分隔并且有效 - 验证由jQuery Validate plugin&处理完成。 multiemail method
问题
有些人直接从他们的电子邮件客户端粘贴电子邮件地址,这些电子邮件通常是一种奇怪的格式 - 在实际电子邮件之前包含姓名和姓氏,或者电子邮件包含在<取代。例如:
"The Dude" <the.dude@gmail.com>, "The Dudette" <thedudette193@gmail.com>
问题
我想要做的是Extract all email addresses from bulk text using jquery,但我在整合这段代码时遇到问题需要与textarea
合作 - 我不知道从哪里开始。
如何在输入逗号或将焦点从textarea
移开后,使用上述答案中的代码提取输入textarea
的每封电子邮件?因此,如果我粘贴"The Dude" <the.dude@gmail.com>
并在其后面键入,
或切换焦点,则输入的值将更改为the.dude@gmail.com
。
答案 0 :(得分:3)
您可以使用事件处理程序检测textarea何时更改(或其他输入字段)。 Jquery支持多个事件(看看http://api.jquery.com/category/events/)。在这种特殊情况下,我应该使用keyup事件来触发extractEmails函数。这样你的提取将是“活的”。但是,通过捕捉模糊或改变事件也是可能的。
使用keyup eventhandler
$('#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);
}
答案 1 :(得分: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(', '));
}
答案 2 :(得分: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()));
}
});
这是小提琴: