Деякий час тому я виставив Перевірка надійності пароля за допомогою JavaScript та регулярних виразів. У цій самій примітці ви також можете перевірити структуру адреси електронної пошти, використовуючи ту саму методологію регулярних виразів (регулярних виразів).
Якщо ваш елемент форми має id = ”адреса електронної пошти” і ви додаєте форму onSubmit = ”return checkEmail ();“, Це функція Javascript, яку ви можете використовувати для повернення попередження, якщо адреса електронної пошти має дійсну структуру чи ні:
function checkEmail() { var email = document.getElementById('emailaddress'); var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if (!filter.test(email.value)) { alert('Please provide a valid email address'); email.focus; return false; } }
Функція перевіряє вміст електронного листа відповідно до вмісту фільтра. Якщо порівняння не вдається, воно видає попередження і повертає фокус назад у поле адреси електронної пошти!
Для форм з кількома адресами електронної пошти було б добре зробити class = ”emailaddress”. Якщо у вас є бібліотека prototype.js (http://www.prototypejs.org) на сторінці, ви можете зробити щось подібне:
var дійсний = true;
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
$$ ('. emailaddress'). кожна (функція (електронна пошта) {
if (! filter.test (email.value)) {
попередження (? Будь ласка, вкажіть дійсну електронну адресу?);
email.focus;
дійсний = хибний;
}
});
повернення дійсне;
Дякую Аде! Мені потрібно буде дізнатися більше про класи та JavaScript!
Оригінальний приклад Дага був класним, але цей замерзає! Я не знав, що ви можете обробляти елементи, що мають клас, таким чином, і функціональний синтаксис є солодким.
Аде та його команда дивовижні!
Приємно, я завжди можу розраховувати на вас за якісь лихі класні сценарії! 🙂
Дякую Тоні!
Мені ця ідея подобається, але я б вагався прийняти саме цей регулярний вираз, не описуючи, які юридичні адреси електронної пошти він не приймає та які нелегальні адреси дозволяє.
Приклад регулярного виразу, який виконує гідну роботу поряд із поясненням, яких випадків він не охоплює, див.
http://www.regular-expressions.info/email.html
Я особисто віддаю перевагу висвітленню більшості простих випадків і винесенню попередження за все інше, а не відхиленню. Якщо Боб дійсно хоче, щоб подати bob@com.museum а не bob@museum.com, чому не дозволити йому?
Привіт Рег,
Ви можете протестувати регулярний вираз, використовуючи Онлайн тестер регулярних виразів.
Крім того, безумовно, можна зробити набагато більше, якщо ви хочете забезпечити адресу електронної пошти діє згідно з RFC.
Є кілька причин не дозволяти комусь вводити недійсну електронну адресу:
1. Вони будуть дратуватися на вас, коли електронна пошта, яку вони очікували, не проходить - незалежно від того, чи не з вашої вини, адресу було введено неправильно.
2. Якщо com.museum був дійсним доменом і, скажімо, Yahoo! керував нею - будь-яка адреса електронної пошти, що відскочить, негативно позначиться на репутації вашої компанії щодо доставки електронної пошти. Це може призвести до блокування всієї електронної пошти вашої компанії.
3. Якщо ваш постачальник послуг електронної пошти дозволив вам увійти bob@com.museum, ви також заплатите за кожен електронний лист, надісланий на цю електронну адресу, доки вони не відпишуться на цю адресу через відмови. Я б уникав будь-якого ESP, який дозволив би вказати недійсну електронну адресу - вони просто беруть ваші гроші!
Дякуємо за зупинку!
Doug
Ідеально, саме те, що мені було потрібно!
Існує набагато простіший спосіб написати вираз:
var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
- З остаточним модифікатором / i немає потреби вказувати верхній регістр.
- Я не знаю жодного TLD з цифрами в ньому.
У додатковій записці я дозволяю TLD до 6 символів; нові регулярно надходять, і ви ніколи не знаєте (ну, у деяких майбутніх, можливо, навіть є цифри, я знаю).
Привіт там,
Я намагаюся використовувати це в існуючій формі в режимі реального часу, але, схоже, це не перевіряє в реальному часі, як перевірка надійності вашого пароля ...
Або я просто такий безглуздий, і це не працює для мене?
До речі, мені дуже подобається те, що у вас тут відбувається, ваші підручники дуже прості, я, безумовно, буду робити закладки цим ...
Просто FYI; Я не пробував рішення Ade, але шаблон вище не перевіряє адреси електронної пошти з апострофами в них .. (наприклад, Mike.O'Hare@Whatever.com). Апострофи дійсні згідно з RFC 2821/2822 -> http://www.faqs.org/rfcs/rfc2822.html
HTH,
Санджай
Здається, він також не обробляє символ плюса, який є дійсним.
Див: http://www.dominicsayers.com/isemail/
Якщо говорити ширше, це ключова проблема вирізання та вставлення коду, яка сама по собі заслуговує на повне обговорення.
@ robbyslaughter.com
ти нут ..
це працює нормально ..! @
Було б добре, якби ми змогли знайти рішення уникнути фальшивих адрес електронної пошти щодо коментарів на WordPress
Просто невелика корекція: регулярний вираз має в кінці додатковий () +. Він повинен читати:
^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$
З першим буде прийнято будь-які довжини TLD (що не є суттєво неправильним, як зазначають інші, але якби це було намір, вираз можна було б скоротити).
Чи можете ви пояснити регулярний вираз цього коду і як він працює? Також про .test - чи є .test типовим твердженням у javascript для перевірки речей, як це було зроблено у коді вище?
Це короткий код для виразу електронної пошти -
функція validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
повернути emailPattern.test (id);
}
Діпак Рай
варанасі
Це короткий код для виразу електронної пошти -
функція validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
повернути emailPattern.test (id);
}
Діпак Рай
варанасі
Велике дякую дядьку. Це мені дуже допомогло 🙂
Аманда
дякую за код!
Дякую, але в цьому регулярному виразі є помилка. Я не фахівець з регулярних виразів, але спробував надіслати електронною поштою:
test @ test
і він пройшов регулярний вираз ... Я помітив, що йому не вистачає "". так повинно бути:
/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
Я кочуюсь з
. /
а як щодо .info?
о, лайно ... 3 роки тому? : S
Ну, це лише груба перевірка, але не на 100% точна, наприклад, це буде нормально john_doe. @ gmail.com що насправді не є дійсною адресою електронної пошти (крапка не допускається як останній символ у локальній частині електронної пошти).
Також він прийняв би john…doe@gmail.com що також є недійсним, оскільки в послідовності не може бути більше однієї крапки.
Це лише деякі вади, які я помітив з першого погляду.
Я не маю наміру просто вказувати на це, якщо хтось планує використовувати це як перевірку безпеки - недостатньо захищений.
Для отримання інформації про дійсні адреси електронної пошти ознайомтесь із цим: http://en.wikipedia.org/wiki/E-mail_address
Діпак,
Насправді, я вважаю, що вам потрібно застосувати пробіл для крапки (".") Отже, ваша функція повинна бути замість цього:
функція validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
повернути emailPattern.test (id);
}
В іншому випадку крапка означала б "будь-який символ". Я вважаю, що таких особливих персонажів потрібно уникати.
З повагою,
Федеріко
функція validateEmail (fld) {
помилка var = ””;
var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var незаконнийChars = / [(),;: \ ”[]] /;
if (fld.value == “Введіть свою електронну адресу”) {
error = “Будь ласка, введіть свою адресу електронної пошти.n”;
} else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
} інакше якщо (fld.value.match (legalChars)) {
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
}
помилка повернення;
}
функція validateEmail (fld) {
помилка var = ””;
var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var незаконнийChars = / [(),;: \ ”[]] /;
if (fld.value == “Введіть свою електронну адресу”) {
error = “Будь ласка, введіть свою адресу електронної пошти.n”;
} else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
} інакше якщо (fld.value.match (legalChars)) {
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
}
помилка повернення;
}
функція validateEmail (fld) {
помилка var = ””;
var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var незаконнийChars = / [(),;: \ ”[]] /;
if (fld.value == “Введіть свою електронну адресу”) {
error = “Будь ласка, введіть свою адресу електронної пошти.n”;
} else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
} інакше якщо (fld.value.match (legalChars)) {
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
}
помилка повернення;
}
функція validateEmail (fld) {
помилка var = ””;
var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var незаконнийChars = / [(),;: \ ”[]] /;
if (fld.value == “Введіть свою електронну адресу”) {
error = “Будь ласка, введіть свою адресу електронної пошти.n”;
} else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
} інакше якщо (fld.value.match (legalChars)) {
error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
}
помилка повернення;
}
функція обрізки
{
повернути s.replace (/ ^ s + | s + $ /, ”);
}
функція обрізки
{
повернути s.replace (/ ^ s + | s + $ /, ”);
}
'.Focus' - це функція, вона повинна бути:
email.focus ()
'.Focus' - це функція, вона повинна бути:
email.focus ()
дивовижний
Працює як самоцвіт. Чудове використання виразів reg у javascript ...
Це тріщина в самоцвіті ...
Буде прийнято адресу “mmm @ mmm..com”. Але дві крапки разом не є дійсними.
Молодці, використовуйте. Це не вимагає жодної перевірки JS.
Але працює лише з сучасними браузерами. На жаль, світ ще не наздогнав. -
Надіслано з поштової скриньки для iPhone