Праверце адрас электроннай пошты з дапамогай JavaScript і рэгулярных выразаў

Некаторы час таму я паставіў Праверка надзейнасці пароля з выкарыстаннем JavaScript і рэгулярных выразаў. У той жа нататцы вы таксама можаце праверыць структуру адраса электроннай пошты, выкарыстоўваючы тую ж метадалогію рэгулярных выразаў (рэгулярных выразаў).

Калі ў вашым элеменце формы ёсць id = ”адрас электроннай пошты” і вы дадаеце форму onSubmit = ”вярнуць 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;
}
}

Функцыя правярае змест электроннага паведамлення да зместу фільтра. Калі параўнанне не атрымалася, яно выскачыць папярэджанне і верне фокус назад у поле адраса электроннай пошты!

41 Каментары

  1. 1

    Для формаў з некалькімі адрасамі электроннай пошты было б добра зрабіць class = ”e-mailадрэса”. Калі ў вас ёсць бібліятэка prototype.js (http://www.prototypejs.org), уключаны на старонку, вы можаце зрабіць нешта накшталт гэтага:

    var сапраўдны = праўда;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. emailaddress'). кожны (функцыя (электронная пошта) {
    if (! filter.test (email.value)) {
    папярэджанне (? Калі ласка, увядзіце сапраўдны адрас электроннай пошты?);
    email.focus;
    сапраўдны = ілжывы;
    }
    });
    вяртанне сапраўднае;

  2. 5
  3. 7

    Мне падабаецца гэтая ідэя, але я б вагаўся прыняць гэты канкрэтны рэгулярны выраз без апісання, якія законныя адрасы электроннай пошты ён не прымае і якія незаконныя адрасы ён дазваляе.

    Для прыкладу рэгулярнага выразу, які робіць годную працу разам з тлумачэннем, якіх выпадкаў ён не ахоплівае, глядзіце наступнае:

    http://www.regular-expressions.info/email.html

    Мае асабістыя перавагі - ахапіць большасць простых выпадкаў і вынесці папярэджанне за ўсё астатняе, а не адхіляць яго. Калі Боб сапраўды хоча sto прадставіць bob@com.museum а ня bob@museum.com, чаму б яму не дазволіць?

    • 8

      Прывітанне Рэг,

      Вы можаце выпрабаваць Regex, выкарыстоўваючы Інтэрнэт-тэстар Regex.

      Акрамя таго, напэўна, можна зрабіць шмат іншага, калі вы хочаце забяспечыць адрас электроннай пошты дзейнічае ў адпаведнасці з RFC.

      Ёсць некалькі прычын, каб не дазволіць каму-небудзь увесці несапраўдны адрас электроннай пошты:
      1. Яны будуць раздражняцца на вас, калі электронная пошта, якую яны чакалі, не праходзіць - незалежна ад таго, ці не па вашай віне, адрас быў уведзены няправільна.
      2. Калі com.museum быў сапраўдным даменам і, скажам, Yahoo! кіраваў ім - любы адрас электроннай пошты, які падскочыў, негатыўна адаб'ецца на рэпутацыі вашай кампаніі па дастаўцы электроннай пошты. Гэта можа прывесці да блакавання ўсёй электроннай пошты вашай кампаніі.
      3. Калі ваш правайдэр электроннай пошты дазволіў вам увайсці bob@com.museum, вы таксама будзеце плаціць за кожны ліст, адпраўлены на гэты адрас электроннай пошты, пакуль яны не адпішуцца на гэты адрас з-за адмоў. Я б пазбягаў любога ESP, які дазваляў бы ўводзіць несапраўдны адрас электроннай пошты - яны проста бяруць вашы грошы!

      Дзякуй за прыпынак!
      Doug

  4. 9
  5. 10

    Ёсць нашмат больш просты спосаб напісаць выраз:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - У канчатковым мадыфікатары / i няма неабходнасці ўказваць верхні дыяпазон.
    - Я не ведаю ніводнага TLD з лічбамі ў ім.
    У заўвазе я дазваляю TLD да 6 сімвалаў; новыя прыбываюць рэгулярна, і вы ніколі не ведаеце (ну, у будучых, магчыма, нават ёсць нумары, я ведаю).

  6. 11

    Прывітанне там,

    Я імкнуся выкарыстоўваць гэта ў існуючай форме ў рэжыме рэальнага часу, але, здаецца, гэта не спраўджваецца ў рэжыме рэальнага часу, як праверка надзейнасці пароля ...

    Ці я проста такі недасведчаны, і гэта не працуе для мяне?

  7. 12

    Дарэчы, мне вельмі падабаецца тое, што вы тут робіце, вашы падручнікі вельмі простыя, я, безумоўна, зраблю закладку на гэты ...

  8. 13
  9. 16

    Было б выдатна, калі б мы змаглі знайсці рашэнне пазбегнуць фальшывых адрасоў электроннай пошты ў каментарыях на WordPress

  10. 17

    Проста невялікая выпраўка: рэгулярны выраз мае ў канцы лішні () +. У ім павінна быць напісана:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    З першым будзе прынята любыя даўжыні TLD (што не з'яўляецца непраўдзівай памылкай, як адзначаюць іншыя, але калі б гэта было мэтай, выраз можна было б скараціць).

  11. 18

    Ці можаце вы растлумачыць рэгулярны выраз гэтага кода і як ён працуе? Таксама пра .test - гэта .test - гэта заява па змаўчанні ў javascript для праверкі рэчаў, як вы рабілі ў кодзе вышэй?

  12. 19
  13. 20

    Гэта кароткі код для выраза электроннай пошты-

    функцыя validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.
    вярнуць emailPattern.test (id);

    }
    Дзіпак Рай
    варанасі

  14. 21
  15. 22
  16. 23

    Дзякуй, але ў гэтым выразным выражэнні ёсць памылка. Я не эксперт па регулярных выразах, але паспрабаваў адправіць электронную пошту:

    test @ test

    і ён прайшоў рэгулярны выраз ... Я заўважыў, што яму не хапае "". так павінна быць:

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  17. 24
  18. 27

    Ну, гэта проста грубая праверка, але не на 100% дакладная, напрыклад, гэта будзе нармальна john_doe. @ gmail.com які на самай справе не з'яўляецца сапраўдным адрасам электроннай пошты (кропка не дапускаецца як апошні знак у лакальнай частцы электроннай пошты).
    Таксама ён прыняў бы john…doe@gmail.com што таксама з'яўляецца несапраўдным, паколькі ў паслядоўнасці не можа быць больш адной кропкі.

    Гэта толькі некаторыя хібы, якія я заўважыў з першага погляду.
    Я маю намер не разбівацца, каб проста адзначыць гэта на той выпадак, калі нехта плануе выкарыстаць гэта ў якасці праверкі бяспекі - недастаткова бяспечна.

    Для атрымання інфармацыі пра сапраўдныя адрасы электроннай пошты праверце гэта: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Дыпак,

    На самай справе, я думаю, вам трэба ўжыць экранацыю для кропкі ("."). Такім чынам, замест гэтага павінна быць ваша функцыя:

    функцыя validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.
    вярнуць emailPattern.test (id);

    }

    У адваротным выпадку кропка будзе азначаць "любы знак". Я лічу, што ад такіх асаблівых персанажаў трэба пазбягаць.

    З павагай,

    Федэрыка

  20. 29

    функцыя validateEmail (fld) {
    памылка var = "";
    var tfld = абрэзаць (fld.value); // значэнне поля з абрэзаным прабелам
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконныяChars = / [(),;: \ ”[]] /;

    if (fld.value == "Увядзіце свой адрас электроннай пошты") {

    error = "Калі ласка, увядзіце свой адрас электроннай пошты.n";
    } інакш калі (! emailFilter.test (tfld)) {// праверыць электронную пошту на наяўнасць незаконных сімвалаў

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    } інакш калі (fld.value.match (незаконныя знакі)) {

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    }
    памылка вяртання;
    }

  21. 30

    функцыя validateEmail (fld) {
    памылка var = "";
    var tfld = абрэзаць (fld.value); // значэнне поля з абрэзаным прабелам
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконныяChars = / [(),;: \ ”[]] /;

    if (fld.value == "Увядзіце свой адрас электроннай пошты") {

    error = "Калі ласка, увядзіце свой адрас электроннай пошты.n";
    } інакш калі (! emailFilter.test (tfld)) {// праверыць электронную пошту на наяўнасць незаконных сімвалаў

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    } інакш калі (fld.value.match (незаконныя знакі)) {

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    }
    памылка вяртання;
    }

  22. 31

    функцыя validateEmail (fld) {
    памылка var = "";
    var tfld = абрэзаць (fld.value); // значэнне поля з абрэзаным прабелам
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконныяChars = / [(),;: \ ”[]] /;

    if (fld.value == "Увядзіце свой адрас электроннай пошты") {

    error = "Калі ласка, увядзіце свой адрас электроннай пошты.n";
    } інакш калі (! emailFilter.test (tfld)) {// праверыць электронную пошту на наяўнасць незаконных сімвалаў

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    } інакш калі (fld.value.match (незаконныя знакі)) {

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    }
    памылка вяртання;
    }

  23. 32

    функцыя validateEmail (fld) {
    памылка var = "";
    var tfld = абрэзаць (fld.value); // значэнне поля з абрэзаным прабелам
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконныяChars = / [(),;: \ ”[]] /;

    if (fld.value == "Увядзіце свой адрас электроннай пошты") {

    error = "Калі ласка, увядзіце свой адрас электроннай пошты.n";
    } інакш калі (! emailFilter.test (tfld)) {// праверыць электронную пошту на наяўнасць незаконных сімвалаў

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    } інакш калі (fld.value.match (незаконныя знакі)) {

    error = "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.n";
    }
    памылка вяртання;
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40

Што вы думаеце?

Гэты сайт выкарыстоўвае Akismet для барацьбы са спамам. Даведайцеся, як дадзеныя апрацоўваюцца каментар.