2013-10-07 4 views
5

Я пытаюсь создать форму электронной почты, которая обрабатывает несколько разделенных запятыми электронных писем в качестве ввода и проверяет их с помощью HTML5. Я хочу использовать следующее регулярное выражение для здравомыслие проверить вход:Проверять несколько адресов электронной почты с помощью HTML5

\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b 

Вот что я пытался

Это не похоже на работу в течение более чем одного:

<input type="email" pattern="\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b" value="" multiple> 

Этот работает, но только встроенная проверка подлинности электронной почты, которая кажется чем-то вроде [email protected]+.

<input type="email" value="" multiple> 

Есть ли способ, чтобы смешать образец и несколько так регулярное выражение проверяет каждый пункт в запятую?

У меня есть демо здесь: http://codepen.io/ben336/pen/ihjKA

+0

Просто попробуйте добавить это к вашему регулярному выражению '((,) | (,??)' Перед последним '\ b'. Не проверял. – DontVoteMeDown

+0

Нет, похоже, не помогает. –

+0

То, как я общался с этим в недавнем веб-приложении, состоял в том, чтобы разбить список и затем проверить каждый элемент в массиве split. –

ответ

8

Попробуйте это:

<input type="email" multiple pattern="^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$" value=""> 

Update:

Использование <input type="email" value="" multiple>, похоже, прослушиваться, позволяя "с @ б" пройти. Хотя я бы пошел с этим методом, чтобы сохранить семантику, как вы сказали, и просто используйте валидацию на стороне сервера, а также на случай, если кто-то попытается отправить электронное письмо типа «a @ b».

Как и в любом случае, вы всегда должны проверять на стороне сервера по соображениям безопасности, так как проверка на стороне клиента может быть легко обойдена.

+0

mmhmm, похоже, соответствует конкретному синтаксису электронных писем с разделителями-запятыми, но ему не хватает встроенных семантических/практических преимуществ использования электронной почты html5 и нескольких полей. Это простой ввод с единственным значением, и если он не соответствует ему, он не сообщает пользователю, что он ищет.Если я не могу заставить встроенную проверку выполнить работу, я буду искать ее в JS, чтобы я мог дать конкретные полезные сообщения. –

+0

FWIW это также позволяет пустые записи (IE '[email protected] ,,, b @ test.com,'), которые, я полагаю, вы можете рассматривать как функцию или ошибку, но это не то, что я хочу. –

+0

Однако, посмотрев на него дальше, похоже, что я могу объединить это с электронной почтой и несколькими атрибутами, чтобы получить эффект, который я хочу. Upvote. –

0

Вы можете прочитать ввод с помощью javascript и разделить ввод на запятую.

function() { 
var inputString = document.getElementById('emailinput').value; 
var splitInput = inputString.split(','); 

var pattern = /"your regex pattern"/; 

var match = true; 

for(i=0;i<splitInput.length;i++) { 
    if(!splitInput.match(pattern)){ 
    match = false; 
    } 
} 

return match; 
} 
+0

hi Justin, я ищу здесь свое собственное HTML-решение. Я знаю, что его тривиально делать с JS. –

+0

Если вы пометили свой вопрос с помощью javascript, вы получите ответы на javascript. – Justin

+1

Я пометил его с помощью JS, потому что в html5 regexes используется язык регулярных выражений javascript. Я был довольно специфичен в отношении того, что искал, думаю. Если вы посмотрите на историю/обновления вопроса, вы увидите, что я действительно добавил тэг js после факта, с этим оговоркой. Я не запустил вас ни на что, ни на ваш вопрос, но ваш ответ не касается конкретного вопроса, который я задал, как объединить атрибуты шаблона, множества и электронной почты для проверки списка писем с помощью html5 –

3

Есть ли способ, чтобы смешать образец и несколько так регулярное выражение проверяет каждый пункт в запятую?

Да. Если регулярное выражение, чтобы соответствовать элемент является foo, то

^(?:foo(?:,(?!$)|$))*$ 

будет соответствовать запятую список foo с.

Сепаратор (?:,(?!$)|$), который будет соответствовать либо запятой, которая не заканчивает вход, либо конец ввода.

Этот разделитель ужасно уродлив, но позволяет избежать дублирования «foo», если ни один суффикс разделителя не является обязательным непустым префиксом тела.

Смежные вопросы