JavaScript හි විද්‍යුත් තැපැල් ලිපිනයක් වලංගු කරන්නේ කෙසේද


4388

ජාවාස්ක්‍රිප්ට් හි විද්‍යුත් තැපැල් ලිපිනයක් වලංගු කිරීම සඳහා සාමාන්‍ය ප්‍රකාශනයක් තිබේද?



60
කරුණාකර මෙම අයිතිය ලබා ගන්න, බොහෝ වෙබ් අඩවි මගේ "firstName@secondName.name" හි විද්‍යුත් තැපැල් ලිපිනයට කැමති නැත, සියලුම ඉහළ පෙළේ වසම් එය අකුරු 2 ක් හෝ 3 ක් අවසන් නොකරයි.
ඉයන් රින්ග්‍රෝස්

41
ඊ-මේල් සඳහා රීජෙක්ස් චෙක්පත් භාවිතා කිරීම සඳහා වන ඕනෑම සහයක් මම 100% ට විරුද්ධ ය. "Foo+bar@gmail.com" හි මගේ විද්‍යුත් තැපැල් ලිපිනය අවලංගු බව පැවසීමෙන් මට මහන්සියි. හොඳම විකල්පය නම් පරිශීලකයාට ඔවුන්ගේ විද්‍යුත් තැපෑල දෙවරක් ටයිප් කරන ලෙස ඉල්ලා සිටීම සහ ඔබ රීජෙක්ස් පරීක්ෂකයෙකු භාවිතා කළ යුතු නම්, එවිට පරිශීලකයාට ඔවුන්ගේ විද්‍යුත් තැපැල් ලිපිනය වලංගු නොවන බව පවසන්න සහ ඔවුන් එය ටයිප් කළ බවට විශ්වාසදැයි විමසන්න. හරි. රීජෙක්ස් පරීක්ෂාවේදී පරීක්ෂා නොකළ දේ පෙන්වා දීමට තරම් දුරට යන්න, නමුත් පෝරමය ඉදිරිපත් කිරීමෙන් ඔවුන්ව වළක්වන්න එපා.
Soundfx4

17
@ Soundfx4: මෙය පිළිතුර විය යුතු අතර එය පිළිගනු ලැබේ. ලිපිනයක නිරවද්‍යතාවය පරීක්ෂා කිරීම ගොළු දෙයකි - ගනුදෙනුකරුවන් කලකිරීමට හොඳම ක්‍රමය. මම දෙවරක් ටයිප් කිරීමට ලිපිනය සහ හැකි විය හැකි ප්රශ්න (අතුරුදහන් ඇති බව ඉඟියක් ඉල්ලා @, ;comආදිය) සහ ඔවුන් කැමැති (ඔවුන් මට එවන්න කුමන පිළිගැනීමට) නම් ඔවුන් පරිශීලක නිවැරදි කරමු
WoJ

4
WoJ දුන් පිළිතුරට මම සම්පූර්ණයෙන්ම එකඟ වෙමි. වලංගු විද්‍යුත් තැපැල් ලිපිනයක ආකෘතිය සරල නිත්‍ය ප්‍රකාශනයකින් පරීක්ෂා කළ නොහැකි තරම් සංකීර්ණ ය. ලිපිනය වලංගු බව තහවුරු කර ගත හැකි එකම ක්‍රමය එය අත්හදා බැලීමයි.
නිකොල්

Answers:


4959

සාමාන්‍ය ප්‍රකාශන භාවිතා කිරීම හොඳම ක්‍රමයයි. ඔබට මෙහි පරීක්ෂණ පොකුරක් දැකිය හැකිය ( ක්‍රෝමියම් වලින් ගත් )

function validateEmail(email) {
    const re = /^(([^<>()\[\]\\.,;:\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,}))$/;
    return re.test(String(email).toLowerCase());
}

යුනිකෝඩ් පිළිගන්නා නිත්‍ය අපනයනය පිළිබඳ උදාහරණය මෙන්න:

const re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;

නමුත් යමෙකු ජාවාස්ක්‍රිප්ට් වලංගුකරණය මත පමණක් රඳා නොසිටිය යුතු බව මතක තබා ගන්න. ජාවාස්ක්‍රිප්ට් පහසුවෙන් අක්‍රිය කළ හැකිය. මෙය සේවාදායක පැත්තේ ද වලංගු කළ යුතුය.

ඉහත ක්‍රියාවෙහි උදාහරණයක් මෙන්න:

function validateEmail(email) {
  const re = /^(([^<>()[\]\\.,;:\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,}))$/;
  return re.test(email);
}

function validate() {
  const $result = $("#result");
  const email = $("#email").val();
  $result.text("");

  if (validateEmail(email)) {
    $result.text(email + " is valid :)");
    $result.css("color", "green");
  } else {
    $result.text(email + " is not valid :(");
    $result.css("color", "red");
  }
  return false;
}

$("#validate").on("click", validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form>
  <p>Enter an email address:</p>
  <input id='email'>
  <button type='submit' id='validate'>Validate!</button>
</form>

<h2 id='result'></h2>


576
මෙම රීජෙක්ස් වලංගු, භාවිතයේ ඇති ඊමේල් ඉවත් කරයි. පාවිච්චි කරන්න එපා. නිසි රීජෙක්ස් එකක් ලබා ගැනීම සඳහා ගූගල් "RFC822" හෝ "RFC2822" සඳහා.
රැන්ඩල් ෂ්වාට්ස්

42
මෙය RFC 822 හි ඇති උදාහරණ පවා පිළිගන්නේ නැත. සමහර සරල අවස්ථා එය @ @ b @ c.com, a(b)@c.com සමඟ නොගැලපේ. වැඩි විස්තර සඳහා RFC බලන්න. මෙන්න වලංගු ලිපිනයන් ප්‍රතික්ෂේප නොකරන රීජෙක්ස් එකක් [^ @] + @ [^ @] + \. [^ @] + සහ පොදු දෝෂ වලින් ආරක්ෂා වේ.
Vroo

126
Ood ගුඩ්පර්සන් මම ඔහුට / ඇයට සිසිල් ඊමේල් ලිපිනයක් ඇති බව පැවසීමට ඊ @ ඊ ඊමේල් කිරීමට උත්සාහ කළෙමි. නමුත් අහෝ, ජීමේල් මට ඉඩ දෙන්නේ නැත. මගේ වෙබ් අඩවියේ ජාවාස්ක්‍රිප්ට් වලංගු භාවයට වඩා ඊමේල් හරහා අන් අය සමඟ සන්නිවේදනය කිරීමට විශාල ගැටළු ඇති ඕනෑම කෙනෙකුට මම සැක කරමි! නමුත් අභියෝගයට නැගී සිටීම ගැන ස්තූතියි.
බෙන් රොබට්ස්

26
මෙය බොහෝ දේශීය ඉංග්‍රීසි කතා කරන්නන් සමඟ හොඳ යැයි පෙනෙන විසඳුමකි, නමුත් එය තුර්කිය පරීක්ෂණයෙන් අසමත් වේ (ජොයෙල් ස්පොල්ස්කි බලන්න). බොහෝ යුනිකෝඩ් අකුරු සඳහා අවසර දී ඇති අතර, උදාහරණයක් ලෙස ආර්ජන්ටිනාවේ "ñoñó1234@server.com" වැනි ලිපින සම්පූර්ණයෙන්ම සාමාන්‍යයි. joelonsoftware.com/articles/Unicode.html
oligofren

140
ඔබට ඊමේල් ලිපින, කාල සීමාව වලංගු කළ නොහැක. ඊමේල් ලිපිනයක් වලංගු කළ හැකි එකම තැනැත්තා ඊමේල් ලිපිනය සපයන්නා පමණි. උදාහරණයක් ලෙස, මෙම පිළිතුර මෙම ඊමේල් ලිපින පවසයි: %2@gmail.com, "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, _@gmail.com, 1@gmail.com , 1_example@something.gmail.comසියල්ල වලංගු වේ, නමුත් Gmail කිසි විටෙකත් මෙම විද්‍යුත් තැපැල් ලිපිනයට ඉඩ නොදේ. ඔබ මෙය කළ යුත්තේ වලංගුභාවය තහවුරු කිරීම සඳහා පරිශීලකයා පැමිණිය යුතු කේතයක් / සබැඳියක් සහිත ඊමේල් ලිපිනය භාරගෙන එම විද්‍යුත් තැපැල් ලිපිනයට විද්‍යුත් තැපැල් පණිවිඩයක් යැවීමෙනි.
කෙවින් ෆෙගන්

832

ඇත්තෙන්ම සරල වලංගු භාවයක් අවශ්‍ය පුද්ගලයින් සඳහා මම ජේමන්ගේ පිළිතුර තරමක් වෙනස් කර ඇත:

anystring@anystring.anystring

නිත්‍ය ප්‍රකාශනය:

/\S+@\S+\.\S+/

උදාහරණ JavaScript ශ්‍රිතය:

function validateEmail(email) 
    {
        var re = /\S+@\S+\.\S+/;
        return re.test(email);
    }
    
console.log(validateEmail('anystring@anystring.anystring'));


69
පරිශීලකයින් කිහිප දෙනෙකුට ගැටළු ඇති විය හැකි සහ අනාගතයේදී එය වලංගු නොවිය හැකි තාක් දුරට ඔබට 20x ක් ක්‍රියාත්මක කළ හැකිය, නැතහොත් එය අවම වශයෙන් යථාර්ථයක් බවට පත්කිරීමට ඔවුන් උත්සාහයක් දරන බවට වග බලා ගැනීම සඳහා ඔබට ඉමෝර්ටල් ෆයර්ෆ්ලයි අනුවාදය අල්ලා ගත හැකිය. ඔබගේ යෙදුම මත පදනම්ව යමෙකුට පිස්සු වැටීමට ඉඩ ඇත, මන්ද ඔවුන්ගේ සම්ප්‍රදායික නොවන විද්‍යුත් තැපෑල ඔබ නොපිළිගන්නා නිසා, ඇත්ත වශයෙන්ම නොපවතින ඊමේල් ලිපින ඇතුළත් කිරීමෙන් ගැටළු ඇති කරන කෙනෙකුට වඩා (ඔවුන්ට ඇතුල් වීමෙන් කෙසේ හෝ කළ හැකිය 100% වලංගු RFC2822 විද්‍යුත් තැපැල් ලිපිනයක් නමුත් ලියාපදිංචි නොකළ පරිශීලක නාමයක් හෝ වසමක් භාවිතා කිරීම). ඉහළට!
user83358

83
M ඉමෝර්ටල් ෆයර්ෆ්ලයි, ඔබ ලබා දුන් රීජෙක්ස් සැබවින්ම ගැලපේ name@again@example.com. ඔබගේ රේඛාව ජාවාස්ක්‍රිප්ට් කොන්සෝලයකට ඇලවීමට උත්සාහ කරන්න. ඔබේ අභිප්‍රාය වූයේ පෙළ ^ ^ පා text යේ ආරම්භය සහ '$' පෙළ ක්‍රියාකරුවන්ගේ අවසානය අවශ්‍ය වන සමස්ත පා text යට පමණක් ගැලපීමයි. මම භාවිතා කරන්නේ/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com')
ඔරිගන් ට්‍රේල්

8
මෙම වලංගු මත පදනම් වූ මෙම ඊ-තැපැල් වලංගු වේ: චෙක්පත @ this..com
Ehsan

4
හ්ම්. විකිපීඩියාව පවසන්නේ "very.unusual.@.unusual.com"@example.comඑය වලංගු ඊමේල් ලිපිනයක් බවයි. /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('"very.unusual.@.unusual.com"@example.com') // false. අපොයි.
බේකන් බිට්ස්

3
මෙයද ඉඩ දෙන්නේ @@@.@නැද්ද? : D
hfossli

765

සම්පූර්ණත්වය සඳහා, මෙන්න ඔබට තවත් RFC 2822 අනුකූල රීජෙක්ස් එකක් තිබේ

නිල ප්‍රමිතිය RFC 2822 ලෙස හැඳින්වේ . වලංගු ඊමේල් ලිපින පිළිපැදිය යුතු වාක්‍ය ඛණ්ඩය එය විස්තර කරයි. ඔබට හැකි ( නමුත් ඔබ නොකළ යුතු - කියවීමට ) පහත ප්රකාශන සමග එය ක්රියාත්මක:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

(...) ද්විත්ව උපුටා දැක්වීම් සහ වර්ග වරහන් භාවිතා කරමින් වාක්‍ය ඛණ්ඩය මඟ හැරියහොත් අපට RFC 2822 වඩාත් ප්‍රායෝගිකව ක්‍රියාත්මක වේ. එය අදටත් සැබෑ භාවිතයේ ඇති සියලුම විද්‍යුත් තැපැල් ලිපිනයන්ගෙන් 99.99% ට ගැලපේ.

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

ඔබට කළ හැකි තවත් වෙනසක් වන්නේ ඕනෑම අකුරු දෙකකින් යුත් රටක කේත ඉහළ මට්ටමේ වසමකට ඉඩ දීම සහ විශේෂිත සාමාන්‍ය ඉහළ මට්ටමේ වසම් වලට පමණි. මෙම රීජෙක්ස් වැනි ව්‍යාජ ඊමේල් ලිපින පෙරහන්asdf@adsf.adsf කරයි. ඔබ නව ඉහල මට්ටමේ වසම් එකතු ලෙස එය යාවත්කාලීන කිරීමට අවශ්ය වනු ඇත .

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

එබැවින් නිල ප්‍රමිතීන් අනුගමනය කරන විට පවා වෙළඳාම් කළ යුතුව ඇත. සබැඳි පුස්තකාලවලින් හෝ සාකච්ඡා සංසදවලින් නිත්‍ය ප්‍රකාශන අන්ධ ලෙස පිටපත් නොකරන්න. ඔබේම දත්ත සහ ඔබේම යෙදුම් සමඟ ඒවා නිතරම පරීක්ෂා කරන්න.

මගේ අවධාරණය


84
සැ.යු: කේතය ලිවීමේදී " අද සත්‍ය භාවිතයේ " වලංගු විය හැකිය, නැවත 200x. මෙම කේතය ඇත ඉඩ තිබෙන නිශ්චිත වසරේ ඔබ්බට භාවිතා පවතී. (මම සෑම සඳහා සත තිබුණේ නම් "සන්තාපයක්, කිසිවෙකු මෙතෙක් එම විශේෂිත අය හැර 4 + ඩොමේනයක් -letter භාවිතා කරනු ඇත" මම ලෝකයේ තඹ සහ නිකල් වෙළෙඳපොළ කෝනර් හැකි විසඳුමක් විය;))
Piskvor ගොඩ නැගීමේ ඉතිරි

7
RFC 2822 ප්‍රායෝගිකව ක්‍රියාත්මක කිරීම සඳහා, තනි වර්‍ග වසම් දිගු වීම වැළැක්වීම සඳහා අවසානය තරමක් වෙනස් කළ යුතුය. / [a-z0-9! # $% & '* + \ / =? ^ _ {|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_{|} ~ -] +) * @ (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0-9])? \.) + [a-z0-9] [a-z0-9 -] * [a-z0-9] /
ෆැරල්

5
එසේම, පළමු කොටස විය යුත්තේ (?: [පරිශීලකයෙකු තම විද්‍යුත් තැපැල් ලිපිනය ප්‍රාග්ධනීකරණය කරන විට ව්‍යාජ නිෂේධනයන් වළක්වා ගැනීම සඳහා A ප්‍රාග්ධනයක් සහිත Az.
දොන් රෝලිං

9
OnDonRolling එසේ නොකරන්න. බව පමණක් ", Z කිරීමට z සඳහා වන 'අදහස් නොවේ, එය ද අදහස් වන්නේ" [\] ^ _' 'ඒ නිසා අතර "Z" සහ "". භාවිතය \wබව කෙසේ හෝ සමුළුවට වන නිසා, හෝ වඩා හොඳ, යන්තම් එය සමග කිසිවක් කිරීමට පෙර කරන ඊ-තැපැල් ලිපිනය සිම්පල්.
kirb

5
"නව ඉහළ මට්ටමේ වසම් එකතු වන බැවින් ඔබට එය යාවත්කාලීන කිරීමට අවශ්‍ය වනු ඇත." හොඳයි, දැන් ඒ සඳහා බොහෝ දේ - පිළිගත් ටීඑල්ඩී 1500 කට වඩා තිබේ.
නේතන් ඔස්මන්

377

ඇවැත්නි, මෙහි සංකීර්ණතා රාශියක් ඇත. ඔබට කිරීමට අවශ්‍ය වන්නේ වඩාත්ම පැහැදිලිව පෙනෙන සින්ටැක්ස් දෝෂ හසුකර ගැනීම පමණි, මම මේ වගේ දෙයක් කරමි:

^\S+@\S+$

එය සාමාන්‍යයෙන් පරිශීලකයා විසින් සිදුකරන වඩාත්ම පැහැදිලි දෝෂ හඳුනාගෙන පෝරමය බොහෝ දුරට නිවැරදි බව සහතික කරයි, එය ජාවාස්ක්‍රිප්ට් වලංගුකරණය වේ.


70
+1 ඊ-තැපෑලක් යැවීම සහ සිදුවන්නේ කුමක්ද යන්න ඊමේල් ලිපිනයක් වලංගු කිරීම සඳහා ඇති එකම ස්ථිරම ක්‍රමය වන අතර, සරල රීජෙක්ස් ගැලපුමකට වඩා වැඩි යමක් කිරීමට අවශ්‍ය නැත.
kommradHomer

20
ඔබට තවමත් එය සරළව තබා ගත හැකි නමුත් එයට "" ඇති බව සහතික කිරීම සඳහා තව ටිකක් කරන්න. after ට පසුව කොහේ හරි අංක හෝ ඉලක්කම් පමණක් ඇත, එබැවින් මා වැනි @ මෙහි, මා @ මෙහි @ සහ මා @ herecom වලංගු නොවේ ... ^ \ S + @ \ S + [\.] [0-9a-z ] + $
ටිම් ෆ්‍රැන්ක්ලින්

14
මම හිතන්නේ විද්‍යුත් තැපැල් ලිපිනයට අවකාශ තිබිය හැකිය. භාවිතා කිරීම වඩා හොඳය.+@.+
සෑම්

11
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð") true
gtournie

111
tgtournie කිසිවෙකු ගණන් ගන්නේ නැත. කිසිවෙකු එය අහම්බෙන් ඊමේල් ක්ෂේත්‍රයකට ඇතුළු කිරීමට යන්නේ නැත , ඒ සියල්ලම ඉදිරිපස වලංගු කිරීම සඳහා වේ: මිනිසුන් අහම්බෙන් ඊමේල් ක්ෂේත්‍රයක් තුළ ඔවුන්ගේ නම වැනි වැරදි තොරතුරු ඇතුළත් කිරීම වැළැක්වීම.
මෙගර්

331

ඊමේල් වලංගු කිරීම සඳහා සාමාන්‍ය ප්‍රකාශනයක් භාවිතා කිරීමට ඔබ තීරණය කළ දෙවැන්න ඔබ තේරුම් ගත යුතු දෙයක් තිබේ: එය බොහෝ විට හොඳ අදහසක් නොවේ . ඔබ එය සමඟ එකඟ වූ පසු, ඔබව අඩක් දුරට ගෙන යා හැකි බොහෝ ක්‍රියාත්මක කිරීම් තිබේ, මෙම ලිපිය ඒවා මනාව සාරාංශ කරයි.

කෙසේ වෙතත්, කෙටියෙන් කිවහොත්, පරිශීලකයා ඇතුළු කළ දෙය ඇත්ත වශයෙන්ම විද්‍යුත් තැපෑලක් බව නියත වශයෙන්ම ධනාත්මකව විශ්වාස කළ හැකි එකම ක්‍රමය ඊමේල් පණිවිඩයක් යැවීම සහ සිදුවන්නේ කුමක්ද යන්න බැලීමයි. ඒ හැරෙන්නට එය සියල්ලම අනුමාන පමණි.


112
-1 රීජෙක්ස් පාලනය පවා සමත් නොවන ඊමේල් ලිපිනයක් වලංගු කිරීම සඳහා මගේ කාලය ගත කිරීමට මට අවශ්‍ය ඇයි?
kommradHomer

63
omkommradHomer - “රීජෙක්ස් අවලංගු” ලිපිනයක් සෑම විටම පාහේ වලංගු වේ, මන්ද ඔබ ඊමේල් ලිපිනයක් වලංගු කිරීම සඳහා භාවිතා කරන ඕනෑම රීජෙක්ස් නිසැකවම පාහේ වැරදි වන අතර වලංගු ඊමේල් ලිපින බැහැර කරනු ඇත. ඊ-තැපැල් ලිපිනය name_part@domain_partසහ ප්රායෝගිකව ඕනෑම දෙයක්, ඇතුළු වූ @එම name_part වලංගු ය; ලිපිනය foo@bar@machine.subdomain.example.museumනීත්‍යානුකූලයි, නමුත් එය ගැලවිය යුතුය foo\@bar@machine..... විද්‍යුත් තැපෑල වසමට ළඟා වූ පසු උදා: 'example.com' එම වසමට තැපෑල "දේශීයව" ගමන් කළ හැකි බැවින් "අමුතු" පරිශීලක නාම සහ සත්කාරක නාම පැවතිය හැකිය.
ස්ටීවන් පී

6
Stackoverflow.com/a/1373724/69697 හි වොයේජර්ගේ පිළිතුරෙහි දෙවන රීජෙක්ස් භාවිතය සඳහා ප්‍රායෝගික වන අතර ව්‍යාජ නිෂේධනයක් නොමැති විය යුතුය. මම මෙහි @kommradHomer සමඟ එකඟ වෙමි - ඔබට අවශ්‍ය නැතිනම් විද්‍යුත් තැපෑලක් එවන්නේ ඇයි? මට තේරුම්ගත නොහැකි රීජෙක්ස් සඳහා ප්‍රත්‍යාවර්තක අකමැත්ත සහ කේත සරලව තබා ගැනීමට ඇති ආශාව මට තේරුම් ගත හැකිය, නමුත් මෙය කේත පේළි කිහිපයක් වන අතර එය අනිවාර්යයෙන්ම අවලංගු වන අයිතම වහාම වල් නෙලීමෙන් ඔබේ සේවාදායකයාට විශාල කරදරයක් ඉතිරි කර ගත හැකිය. රීජෙක්ස් එකක් තනිවම උදව් කළ නොහැකි නමුත් සර්වර්සයිඩ් වලංගුකරණයට හොඳ අනුපූරකයක් ලෙස සේවය කරයි.
බෙන් රෙජෙන්ස්පන්

6
mdmur මම පිළිගන්නවා “සෑම විටම පාහේ වලංගු” බොහෝ විට එය ඉක්මවා යයි, නමුත් මගේ (පරිපූර්ණ වලංගු හා වැඩ කරන) විද්‍යුත් තැපැල් ලිපිනයන් බොහෝ විට වෙබ් අඩවි විසින් ප්‍රතික්ෂේප කර ඇත, මට .usවසමක් ඇති නිසා හෝ මම +වම් පසින් භාවිතා කළ නිසා මෙම @- බොහෝ ස්ථාන මෙම බරපතල දෝෂ ස්ථාවර කර, නමුත් දේශීය-කොටස (@ ඉතිරි) විය හැකි ඕනෑම දෙයක් වසම හිමිකරු කැමතියි. -> "foo@bar.com"@example.com <- වලංගු ඊමේල් ලිපිනයකි.
ස්ටීවන් පී

8
omkommradHomer "රීජෙක්ස් අවලංගු ලිපිනයක්% 100 අවලංගු ලිපිනයකි." මට කණගාටුයි ... මට සමාවෙන්න? ඇත්ත වශයෙන්ම එය පරිපූර්ණ ලෙස වලංගු වන විට foo+bar@gmail.com වලංගු ඊ-තැපෑලක් නොවන බව මට කී වතාවක් පවසා ඇත්ද? ඔබේ තර්කනය අතිශයින්ම දෝෂ සහිතය. මම ඊමේල් සමඟ පෝරම ඉදිරිපත් කර ඇත: thisisafakeemailbutitwillpassyourstupidregexcheck@regexchecksareretarded.com සහ අනුමාන කරන්නේ කුමක්ද? රෙජෙක්ස් චෙක්පත පසුකරයි ... නමුත් එය වලංගු ඊ-තැපෑලක් නොවේ (තාක්‍ෂණිකව එය එසේ වුවත්, එය නොපවතින බව මම ඔබට පොරොන්දු වෙමි ... එහෙත් ඔහුගේ නිකට සීරීමට ). බොහෝ දෙනා පවසා ඇති පරිදි, එය IS BAD IDEA ....
Soundfx4

211

HTML5 හි විද්‍යුත් තැපැල් වලංගුතාවයක් ඇත. ඔබගේ බ්‍රව්සරය HTML5 සඳහා සහය දක්වන්නේ නම් ඔබට පහත කේතය භාවිතා කළ හැකිය.

<form><input type="email" placeholder="me@example.com" required>
    <input type="submit">
</form>

jsFiddle සබැඳිය

සිට HTML5 පිරිවිතර :

, වලංගු විද්යුත්-තැපැල් ලිපිනය ද ගැලපෙන වැලක් වේ emailපහත සඳහන් ABNF, එය සඳහා යුනිකෝඩ් අක්ෂර කට්ටලය නිෂ්පාදනය.

email   = 1*( atext / "." ) "@" label *( "." label )
label   = let-dig [ [ ldh-str ] let-dig ]  ; limited to a length of 63 characters by RFC 1034 section 3.5
atext   = < as defined in RFC 5322 section 3.2.3 >
let-dig = < as defined in RFC 1034 section 3.5 >
ldh-str = < as defined in RFC 1034 section 3.5 >

මෙම අවශ්‍යතාවය හිතාමතා උල්ලං is නය කිරීමකි RFC 5322 උල්ලං වන අතර, එය එකවරම දැඩි ("@" අක්ෂරයට පෙර), නොපැහැදිලි ("@" අක්‍ෂරයෙන් පසුව), සහ ඉතා ලිහිල් (අදහස් දැක්වීමට ඉඩ දෙන) විද්‍යුත් ලිපිනයන් සඳහා වාක්‍ය ඛණ්ඩයක් අර්ථ දක්වයි. , වයිට්ස්පේස් අක්ෂර, සහ බොහෝ පරිශීලකයින්ට නුහුරු පුරුදු වලින් උපුටා ගත් නූල්) මෙහි ප්‍රායෝගික භාවිතයට ගත යුතුය.

පහත දැක්වෙන ජාවාස්ක්‍රිප්ට් සහ පර්ල්-අනුකූල නිත්‍ය ප්‍රකාශනය ඉහත අර්ථ දැක්වීම ක්‍රියාත්මක කිරීමකි.

/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

29
මෙය හොඳයි, නමුත් මෙහි ඇති ගැටළුව නම් එය formටැගයක් තුළ තිබිය යුතු අතර submitආදානය මඟින් ඉදිරිපත් කළ යුතු අතර එය සෑම කෙනෙකුටම සුඛෝපභෝගී දෙයක් නොවේ. එසේම, ඔබට දෝෂ පණිවිඩය සැබවින්ම හැඩගස්වා ගත නොහැක.
ජේසන්

3
පෝරමයෙන් ඔබව නිදහස් කර ඉදිරිපත් කරන පිළිතුරක් මම පහතින් එකතු කර ඇත්තෙමි. නමුත් ඔව්, බ්‍රව්සර් සාමාන්‍යයෙන් අදාළ වන්නේ යම් පිළිගත හැකි චෙක්පතක් මිස සම්පූර්ණ RFC 822 වලංගු කිරීමක් නොවේ.
බෝල්ඩ්වින්

8
@ br1: “අ” ටොප්ලෙවල් ඩොමේනයක් නොමැති නිසා එය අවලංගු නොවේ. ඔබගේ අන්තර් ජාලය සමහර අයිපී වලට නිරාකරණය කර ඇත්නම් කුමක් කළ යුතුද?
පියාඹන බැටළුවන්

7
Html5 විද්‍යුත් තැපැල් ක්ෂේත්‍ර වර්ගය පරිශීලක @ විද්‍යුත් තැපෑල වැනි විද්‍යුත් තැපැල් පිළිගනී
Puse

1
සටහන @ පියුස්ගේ අදහස: HTML 5 විද්‍යුත් තැපැල් ආදානය පිළිගන්නා user@emailඅතර, උදාහරණයක් ලෙස, PHP ගේ filter_varඅදහස් පිළිගන්නේ නැත. මෙය ගැටළු ඇති කළ හැකිය.
ටෙක්සලේට්

136

මෙය හොඳම විසඳුම බව මම සොයාගෙන ඇත:

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

එය පහත ආකෘති වලට ඉඩ දෙයි:

1. beautifulandsimple@example.com
2. very.common@example.com
3. dispable.style.email.with+symbol@example.com
4. other.email-with-dash@example.com
9. #!$%&'*+-/=?^_` {==||@example.org
6. "() []:,; @ \\\"! # $% & '* + - / =? ^ _ `{} | ~ .a "@ example.org
7. "" @ example.org (උපුටා දැක්වීම් අතර අවකාශය)
8. xexample.com (දේශීය කොටසෙහි යුනිකෝඩ් අක්ෂර)
9. .comé@üñîçøðé.com (ඩොමේන් කොටසෙහි යුනිකෝඩ් අක්ෂර)
10. Pelé@example.com (ලතින්)
11. δοκιμή@παράδειγμα.δοκιμή (ග්‍රීක)
12. 我 買 @ 屋企. 香港 (චීන)
13. 甲 斐 @ 黒 川. Japanese (ජපන්)
14. чебурашка@ящик-с-апельсинами.рф (සිරිලික්)

එය පැහැදිලිවම බහුකාර්ය වන අතර මූලික ඕනෑම දෙයක් ක්‍රියාත්මක කරන අතරම සියලු වැදගත් ජාත්‍යන්තර චරිත සඳහා ඉඩ ලබා දේ. එය RFC විසින් තාක්‍ෂණිකව අවසර දී ඇති අවකාශයන් අවහිර කරනු ඇත, නමුත් ඒවා ඉතා දුර්ලභ බැවින් මෙය කිරීමට මම සතුටු වෙමි.


9
මෙය හරියටම මම කරමින් සිටිමි. මෙම සියලු "සංකීර්ණ" පිළිතුරු ගැටළු ඇති කරයි: ඒවා එක්කෝ සුළු කේත IDN වලට ඉඩ නොදේ හෝ ස්ථාවර ටීඑල්ඩී කට්ටලයක් භාවිතා නොකරයි හෝ පරිශීලකයාට ඔවුන්ගේ විද්‍යුත් තැපැල් උපසර්ගයේ (@ before ට පෙර) වැනි අක්ෂර භාවිතා නොකිරීමට අනවශ්‍ය ලෙස සීමා කරයි. හෝ ඩොමේන් නාමය. ආරක්ෂක හේතූන් මත වලංගු කිරීම සඳහා ජාවාස්ක්‍රිප්ට් ඉදිරිපස (හේතුව පිටුපස භාවිතා කිරීම සඳහා නොවේ) ප්‍රමාණවත් නොවේ. එබැවින් යතුරු ලියනය වැළැක්වීමට පරිශීලකයාට උදව් නොකරන්නේ ඇයි? මූලික යතුරු ලියන දෝෂ තිබේදැයි ඇත: TLD හෝ පරිශීලකයා-උපසර්ගය (@ පෙර) හෝ වසම-කොටසක් හෝ කරතිබේ අමතක @ලෙස .(හෝ අනෙක් අතට). හේතුව අපි සේවාදායක පැත්තෙන් වඩා සීමා සහිත විය යුතුය.
හැෆෙන්ක්‍රනිච්

සමහර අමුතු හේතුන් නිසා username@domain.comමෙම රටාව සමඟ ක්‍රියා නොකරයි
අයින්ස්ටයින්

2
ඔබගේ රීජෙක්ස් අනුව "_.............. kamal@gmail.com" වලංගු වේ, එය එසේ නොවිය යුතුය!
කමල් නයන්

1
මෙන්න ඔබට මෙම විසඳුම සමඟ සම්බන්ධ වීමට අවශ්‍ය නම් උදාහරණ සහිත ප්‍රකාශිත රෙජෙක්ස්
ryanm

7
මෙම රීජෙක්ස් නිවැරදි ය. කවුරුහරි ඔවුන්ගේ විද්‍යුත් තැපෑල ඇතුළු කරන්නේ නම් a@b@c@d.x.y.@.zඔවුන්ට නරක කාලයක් ලැබීමට සුදුසුද? : D
corysimmons

94

නවීන බ්‍රව්සර් වලදී ඔබට පිරිසිදු ජාවාස්ක්‍රිප්ට් සහ ඩොම් සමඟ සුෂිල්ගේ පිළිතුර මත ගොඩනගා ගත හැකිය :

function validateEmail(value) {
  var input = document.createElement('input');

  input.type = 'email';
  input.required = true;
  input.value = value;

  return typeof input.checkValidity === 'function' ? input.checkValidity() : /\S+@\S+\.\S+/.test(value);
}

මම වීණාවක් උදාහරණයක් ලෙස එකට දානවා http://jsfiddle.net/boldewyn/2b6d5/ . විශේෂාංග අනාවරණය කර ගැනීම සහ ස්කොවිල්ගේ පිළිතුරෙන් හිස් ඇටකටු වලංගු කිරීම සමඟ ඒකාබද්ධව , එය නිත්‍ය ප්‍රකාශන සංහාරයෙන් ඔබව නිදහස් කරන අතර පැරණි බ්‍රව්සර් මත නොගැලපේ.


4
මෙය ගැටළුව විසඳීම සඳහා ඉතා හොඳ අදහසකි, නමුත් එය ක්‍රියා නොකරන්නේ බ්‍රව්සර්වල ද වලංගු වලංගු භාවයක් ඇති බැවිනි. උදා: ක්‍රෝම්, ෆයර්ෆොක්ස් සහ සෆාරි වල වර්තමාන අනුවාද වල .@aමෙන් වලංගු trueවේ.
හැන්ක්

13
En හෙන්රි ජැක්සන් අවාසනාවට, මේ අවස්ථාවේ දී ඔව්. මෙයට හේතුව වලංගු විද්‍යුත් තැපැල් ලිපිනයක් වන RFC ට අනුව (අන්තර් ජාල සිතන්න). ඉතා පටු බව තහවුරු කර ව්‍යාජ නිෂේධනීය ප්‍රති produce ල නිපදවන්නේ නම් බ්‍රව්සර් අඹරනු ඇත.
බෝල්ඩ්වින්

3
විශේෂාංග හඳුනාගැනීම සහ අලංකාර පරිහානිය අඩංගු වන පරිදි යාවත්කාලීන කරන ලදි, දැන් එය නව බ්‍රව්සර් බිඳ නොදමන නමුත් ඔබ කැමති ඕනෑම රීජෙක්ස් භාවිතා කරයි.
රොනී

හොඳ විසඳුමක්. කනගාටුවට කරුණක් නම් මෙය HTML5 + සඳහා පමණි.
එඩ්වඩ් ඔලමිසන්

3
මෙය බොහෝ දුරට මුල් ප්‍රශ්නයට හොඳම විසඳුමයි. ඔව්, එය HTML5 භාවිතා කරයි, නමුත් මෙම මට්ටමේ නිරවද්‍යතාවය අවශ්‍ය වන යෙදුම් වලින් බහුතරයක් දැනටමත් වෙනත් ආකාරයකින් HTML5 මත රඳා පවතිනු ඇත. යමෙකුගේ විද්‍යුත් තැපෑල කෙසේ හෝ සත්‍යාපනය නොකොට වලංගු දැයි අපට නිශ්චය කළ නොහැක, එබැවින් එය වලංගු කිරීම සඳහා අපි එතරම් කාලයක් හෝ වෑයමක් ආයෝජනය නොකළ යුතුය. කිසියම් පැහැදිලි වාක්‍ය ඛණ්ඩයක් හෝ උත්සාහ කළ නපුරුකම සඳහා ඉක්මන් පරීක්‍ෂණයක් යනු අප වියදම් කළ යුතු සියලු උත්සාහයන්ය.
වුඩි පේන්

69

මෙය නිවැරදි RFC822 අනුවාදයයි.

function checkEmail(emailAddress) {
  var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
  var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
  var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
  var sQuotedPair = '\\x5c[\\x00-\\x7f]';
  var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
  var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
  var sDomain_ref = sAtom;
  var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
  var sWord = '(' + sAtom + '|' + sQuotedString + ')';
  var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
  var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
  var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
  var sValidEmail = '^' + sAddrSpec + '$'; // as whole string

  var reValidEmail = new RegExp(sValidEmail);

  return reValidEmail.test(emailAddress);
}

IDN ලිපින වලංගු නොවේ (info@üpöü.com)
DAH

66

ජාවාස්ක්‍රිප්ට් සාමාන්‍ය ප්‍රකාශනයකට ගැලපේ:

emailAddress.match( / some_regex /);

ඊමේල් සඳහා RFC22 නිත්‍ය ප්‍රකාශනයක් මෙන්න :

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*
"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x
7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<
!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])
[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$

1
At කැටෝ: පසුගාමී (?>වීම නැවැත්වීම සහ දීර් provide (?<angle><)…(?(angle)>)කාලයක් ලබා දීමෙන් වැළකී සිටීම ඇතුළුව නොගැලපෙන දිගු කිහිපයක් භාවිතා කරයි |.
රයි-

60

සියලුම විද්‍යුත් තැපැල් ලිපිනයන්හි 'at' (එනම් @) සංකේතය අඩංගු වේ. අවශ්‍ය කොන්දේසිය පරීක්ෂා කරන්න:

email.indexOf("@") > 0

වඩා සංකීර්ණ කිසිවක් සමඟ කරදර නොවන්න. ඊ-තැපෑලක් RFC- කෘතිමව වලංගු ද යන්න ඔබට හොඳින් තීරණය කළ හැකි වුවද, එය එය සැපයූ පුද්ගලයාට අයිති දැයි ඔබට නොකියයි. ඇත්තෙන්ම වැදගත් වන්නේ එයයි.

එය පරීක්ෂා කිරීම සඳහා, වලංගු පණිවිඩයක් යවන්න.


3
සංකේත එකකට වඩා තිබේ නම් කුමක් කළ යුතුද? වෙනත් සීමිත සංකේත? මෙම වලංගුභාවය විශ්වාස කළ නොහැක ...
eatmypants

56

RFC වලට අනුකූලව විද්‍යුත් තැපැල් ලිපිනය නිවැරදිව වලංගු කිරීම එක්-ලයිනර් නිත්‍ය ප්‍රකාශනයකින් ලබා ගත හැකි දෙයක් නොවේ. PHP හි මා සොයාගත් හොඳම විසඳුම සහිත ලිපියක් වන්නේ වලංගු විද්‍යුත් තැපැල් ලිපිනයක් යනු කුමක්ද? . නිසැකවම, එය ජාවා වෙත වරාය කර ඇත. මම හිතන්නේ මෙම කාර්යය ජාවාස්ක්‍රිප්ට් හි ගෙනයාමට හා භාවිතා කිරීමට නොහැකි තරම් සංකීර්ණ ය. JavaScript / node.js port: https://www.npmjs.com/package/email-addresses .

හොඳ පුරුද්දක් වන්නේ සේවාදායකයාගේ දත්ත වලංගු කිරීම ය, නමුත් සේවාදායකයේ වලංගුභාවය දෙවරක් පරීක්ෂා කරන්න. මෙය මනසේ තබාගෙන, ඔබට නූලක් සේවාදායකයාගේ වලංගු ඊමේල් ලිපිනයක් සේ පෙනේ දැයි පරීක්ෂා කර සේවාදායකයේ දැඩි පරීක්ෂාව සිදු කළ හැකිය.

නූලක් වලංගු තැපැල් ලිපිනයක් සේ පෙනේදැයි පරීක්ෂා කිරීමට මා භාවිතා කරන ජාවාස්ක්‍රිප්ට් කාර්යය මෙන්න:

function looksLikeMail(str) {
    var lastAtPos = str.lastIndexOf('@');
    var lastDotPos = str.lastIndexOf('.');
    return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
}

පැහැදිලි කිරීම:

  • lastAtPos < lastDotPos: අවසන් වරට @පසුගිය පෙර විය යුතුය .සිට @හැකි සේවාදායකයේ නම (මම දන්න තරමින්) කොටසක් විය.

  • lastAtPos > 0: අන්තිමයට පෙර යමක් (විද්‍යුත් තැපැල් පරිශීලක නාමය) තිබිය යුතුය @.

  • str.indexOf('@@') == -1: @@ලිපිනයේ කිසිවක් නොතිබිය යුතුය . පවා නම් @ඊ-තැපැල් පරිශීලක නාමය අවසන් අක්ෂරය දර්ශණය වන විට, එය එසේ උපුටා කළ යුතු වේ "බව අතර වනු ඇති @අතර, අවසන් වරට @මෙම ලිපිනය.

  • lastDotPos > 2: අවසාන තිතට පෙර අවම වශයෙන් අක්ෂර තුනක් වත් තිබිය යුතුය a@b.com.

  • (str.length - lastDotPos) > 2: අන්තිම තිතට පසුව අක්ෂර දෙකක වසමක් සෑදීම සඳහා ප්‍රමාණවත් අක්ෂර තිබිය යුතුය. වරහන් අවශ්‍ය දැයි මට විශ්වාස නැත.


මෙම fn ලස්සනයි, නමුත් ඉහළ පිළිතුරේ ලියා ඇති රීජෙක්ස් වලට වඩා එය හොඳද?
අතුල් ගෝයාල්

4
මම එය සැක කළා. මම එය භාවිතා කරන්නේ නූලක් ඊමේල් එකක් ලෙස පෙනේද යන්න පරීක්ෂා කර විස්තර සේවාදායකයේ කේතයට තබන්න.
මිලෝ රාසි

එය 'aaaa' වැනි ඕනෑම නූලක්, එනම් '@' සහ 'නොමැතිව' වලංගු වේ.
ජෙනඩි ෂුමාකර්

1
එය එසේ නොවිය යුතුය. lastIndexOf () ඉඳිකටුවක් සොයාගත නොහැකි නම් -1 ආපසු එවිය යුතුය.
මිලෝ රාසික්

" @ඊමේල් පරිශීලක නාමයේ අවසාන අක්‍ෂරය ලෙස පෙනුනත්, එය උපුටා "දැක්විය යුතු අතර එය ලිපිනයේ @අවසාන හා අවසාන @අතර වේ." කුමක් ගැනද "@@"@example.com?
රයි-

47

මෙය http://codesnippets.joyent.com/posts/show/1917 වෙතින් සොරකම් කරන ලදි

email = $('email');
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email.value)) {
  // Yay! valid
  return true;
}
else
  {return false;}

7
මෙය පෙර ජනප්‍රිය .museumහා .travelවසම් පෙරහන් කරයි (පසු වර්‍ග 4 ක් හේතුවෙන් .)
බොබෝබෝබෝ

4
{2,4} සිට 6 2,6} දක්වා වෙනස් කිරීම ගැටළුවක් නොවනු ඇත
ඇන්ටන් එන්

11
Nt ඇන්ටන් එන්: එයට ආසන්න වශයෙන් වෙනත් ගැටලු ගැසිලියනයක් ද ඇත; අවසාන {2,4}කොටස හුදෙක් එහි ප්‍රයෝජනවත් දර්ශකයකි ("ඔබ එම දෝෂය දකින විට, අනෙක් අය අවට සිටිය හැකිය"). මෙම වඩාත් මූලික එක් නොමැතිකමයි +දේශීය කොටසක්; ඉහත අදහස් කර ඇති සියලුම දෝෂ පෙන්වා දීමට මෙම විවරණ පෙට්ටිය ඉතා කුඩාය .
පිස්ක්වර්

37
ඇයි ඔයාට කරන්න බැරි return filter.test(email.value);?
එම්.ටී.

3
Nt ඇන්ටන්: දැන් අපට 10+ අක්ෂර TLDs ( xn--clchc0ea0b2g2a9gcd) ඇත. තවමත් ගැටලුවක් නොවේද?
පිස්ක්වර්

42

මෙය කරන්න:

[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?

මන්ද? එය RFC 2822 මත පදනම් වේ අතර එය සම්මත සියලුම විද්‍යුත් තැපැල් ලිපිනයන් පිළිපැදිය යුතුය. ඔබ "සරල" දෙයකට කරදර වන්නේ මන්දැයි මට විශ්වාස නැත ... ඔබ එය කෙසේ හෝ පිටපත් කර අලවන්නට යන්නේ;)

බොහෝ විට දත්ත සමුදායේ ඊමේල් ලිපින ගබඩා කිරීමේදී මම ඒවා කුඩා අකුරක් බවට පත් කරමි. ප්‍රායෝගිකව රීජෙක්ස් සාමාන්‍යයෙන් සිද්ධි සංවේදී නොවන ලෙස සලකුණු කළ හැකිය. එවැනි අවස්ථාවල මෙය තරමක් කෙටි වේ:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

ජාවාස්ක්‍රිප්ට් හි එය භාවිතා කිරීම පිළිබඳ උදාහරණයක් මෙන්න ( iඅවසානයේ දී සංවේදී නොවන ධජය සමඟ).

var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
console.log( emailCheck.test('some.body@domain.co.uk') );

සටහන :
තාක්ෂණික සමහර ඊමේල් පෙර කොටසේ මිල කැඳවීම් ඇතුලත් කර ගත හැක @මේ ආකාරයටම තුල පැන චරිත සමග සංකේතය (ඔබගේ ඊ-තැපැල් ලිපිනය පරිශීලක පත්කරයි විය යුතු අතර, බයෙන් වගේ අඩංගු විය හැක එසේ @සහ "..."එය උපුටා ලියා තියෙන්නේ තාක් කල්). කිසිවෙකු මෙය කරන්නේ නැත! එය යල්පැන ඇත. නමුත්, එය සත්‍ය RFC 2822 ප්‍රමිතියට ඇතුළත් කර ඇති අතර මෙහි අතහැර දමා ඇත.

වැඩි විස්තර: http://www.regular-expressions.info/email.html


/iසාමාන්‍ය ප්‍රකාශනයේ අවසානයේ ඇති ධජය නිසා ජාවාස්ක්‍රිප්ට් කේතය සංවේදී නොවේ . එය සිද්ධි-සංවේදී නොවන සංසන්දනයක් විය යුතු බව මම සඳහන් කරමි, නමුත් මම එය වඩාත් පැහැදිලි කරමි.
රයන් ටේලර්

මා වෙනුවෙන් වැඩ කළේ
ඇලෙක්ස්

40

මෙම ගැටළුව විසඳීමට මම සැබවින්ම බලා සිටිමි. එබැවින් මම ඉහත ඊමේල් වලංගු කිරීමේ සාමාන්‍ය ප්‍රකාශනය වෙනස් කළෙමි

  • මුල්
    /^(([^<>()\[\]\\.,;:\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,}))$/

  • වෙනස් කරන ලදි
    /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/

විකිපීඩියා ඊමේල් ලිපිනයේ උදාහරණ යැවීමට .

මෙහි ප්‍රති result ලය ඔබට දැක ගත හැකිය .

රූප විස්තරය මෙහි ඇතුළත් කරන්න


මෙය හොඳ විසඳුමක් සේ පෙනේ, එය නව ටීඑල්ඩී සහ ලිපි 1 ක් සමඟ ද ක්‍රියා කරයි
මාර්ක් හියුස්

john..doe@example.comනිවැරදි නොවිය යුත්තේ ඇයි ? එය වලංගු කොනක නඩුවකි.
වැලෙරියෝ බොස්

24

ආදාන නූලක් වලංගු කිරීම සඳහා ඔබ සාමාන්‍ය ප්‍රකාශන භාවිතා නොකළ යුතුය. එය ඉතා සංකීර්ණ වන අතර සියලු අවස්ථා ආවරණය නොකරයි.

දැන් ඔබට ආවරණය කළ හැක්කේ 90% ක් පමණි, එවැනි දෙයක් ලියන්න:

function isPossiblyValidEmail(txt) {
   return txt.length > 5 && txt.indexOf('@')>0;
}

ඔබට එය ශෝධනය කළ හැකිය. උදාහරණයක් ලෙස, 'aaa @' වලංගු වේ. නමුත් සමස්තයක් ලෙස ඔබ සාරාංශය ලබා ගනී. රැගෙන නොයන්න ... සරල 90% විසඳුමක් 100% විසඳුමට වඩා හොඳය.

ලෝකයට සරල කේතයක් අවශ්‍යයි ...


15
මෙය අවලංගු ඊමේල් ලිපින බොහොමයක් ඇතුළත් කිරීමට ඉඩ සලසයි.
cazlab

3
එය කිසිසේත්ම නිදොස් කිරීම කළ නොහැකි විය යුතුය. මෙම ත්‍රෙඩ් එකේ “@” ට වඩා වැඩි ප්‍රමාණයක් වලංගු කරන කදිම උදාහරණ බොහෝමයක් ඇත. ඔබේ උදාහරණය “u @” වලංගු ඊමේල් ලිපිනයක් ලෙස සැලකීමට ඉඩ දෙයි. අවම වශයෙන් වසමක් හෝ යමක් තිබේද යන්න තක්සේරු කරන්න. . ඩොමේන් විය හැකි මෙයට මම කෝල් කැමතියි දේ උදාහරණයක් එය මෙතෙක් පොට දී අවම ශ්රේණිගතකිරීම් පිළිතුර ලෙස ඔබ එය ආරක්ෂා කරන්නේ ඇයි මට විශ්වාස නෑ "ගණයට අයත් දැඩි ලෙස කම්මැලි.".
cazlab

3
as කැස්ලැබ් සමහර විට ඔබ හරි ඇති. සියල්ලට පසු මා ඡන්දය ප්‍රකාශ කර ඇත. ඔබෙන් වෙනස් ලෙස ඉහත කේත වලින් කිසිවක් ස්නිපෙට් නිදොස් කිරීමට පහසු යැයි මම නොසිතමි. අවශ්‍ය නම් අවම වශයෙන් මගේ 'ආක්‍රමණශීලී කම්මැලි' ප්‍රවේශය වැඩිදියුණු කළ හැකිය.
Zo72

3
මෙය රීජෙක්ස් භාවිතයට වඩා වෙනස් වන්නේ කෙසේද? (.+)@(.*)එකම දේ කරයි, සහ කෙටි වේ.
snostorm

4
+1 - පරිශීලකයා අවම වශයෙන් විද්‍යුත් තැපැල් ලිපිනයක් දැමීමට උත්සාහ කර ඇත්දැයි තහවුරු කර ගැනීම පරමාර්ථය නම්, විද්‍යුත් තැපැල් ලිපිනය අනිවාර්යයෙන්ම විද්‍යුත් තැපෑලක් නොවන බව තීරණය කළ හැකිදැයි පරීක්ෂා කිරීම. විශිෂ්ට විසඳුමක්. හොඳ උදාහරණයක් නම් පුද්ගලයෙකුගේ පරිශීලක නාමය විද්‍යුත් තැපැල් ලිපිනයක් වීමට ඔබට අවශ්‍ය නම්. පරිශීලකයා 'sexy_chick_23' ලෙස ටයිප් කරන්නේ නම්, ඊ-මේල් පණිවිඩයක් අපේක්ෂා කරන බව ඔවුනට ලබා දීමට මෙම රීජෙක්ස් භාවිතා කළ හැකිය. යමක් ටයිප් කර ඊමේල් එකක් මෙන් පෙනේ, නමුත් එසේ නොවේ නම්, පරිශීලකයාට කිසි විටෙකත් 'තහවුරු කිරීමේ' විද්‍යුත් තැපෑලක් නොලැබෙන අතර ලියාපදිංචි වීමේ ක්‍රියාවලිය කිසි විටෙකත් වලංගු නොවේ.
ක්‍රිස් ඩුට්‍රෝ

23

ඇතුළත් කළ විද්‍යුත් තැපැල් ලිපිනය වලංගු ද නැතිනම් HTML භාවිතා නොකරන්නේ දැයි පරීක්ෂා කරන්න.

<input type="email"/>

වලංගු කිරීම සඳහා ශ්‍රිතයක් ලිවීමේ අවශ්‍යතාවයක් නොමැත.


4
IE <10 මෙයට සහය නොදක්වන අතර ඇන්ඩ්‍රොයිඩ්ගේම බ්‍රව්සරයක්ද සහාය නොදක්වයි.
ෆ්‍රෑන්ක් කොනිජ්

7
ඉහළට. IE <10 මිය ගොස් ඇත.
මයිකල් ෂෙපර්

19

100% නිවැරදි ඊමේල් වලංගු කරන්නෙකු ලබා ගැනීම දුෂ්කර ය. එය නිවැරදි කර ගැනීමට ඇති එකම සැබෑ ක්‍රමය වන්නේ පරීක්ෂණ විද්‍යුත් තැපෑලක් ගිණුමට යැවීමයි. එයින් කියැවෙන්නේ ඔබට සාධාරණ දෙයක් ලැබෙනවාද යන්න තහවුරු කර ගත හැකි මූලික චෙක්පත් කිහිපයක් තිබේ.

වැඩිදියුණු කළ යුතු කරුණු කිහිපයක්:

අළුත් වෙනුවට RegExp, මේ ආකාරයට ලිවීමට උත්සාහ කරන්න regexp:

if (reg.test(/@/))

දෙවනුව, @ලකුණට පසුව යම් කාල පරිච්ඡේදයක් පැමිණේදැයි පරීක්ෂා කර බලා, කාල @හා කාල අතර අක්ෂර ඇති බවට වග බලා ගන්න .


19

මෙම ආකාරය වේ node එකක් මතම ඊට අදාල-validator එය:

/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/

14

ඔබගේ වලංගුකරණ ශ්‍රිතය තුළ මෙම කේතය භාවිතා කරන්න:

var emailID = document.forms["formName"]["form element id"].value;
atpos = emailID.indexOf("@");
dotpos = emailID.lastIndexOf(".");
if (atpos < 1 || ( dotpos - atpos < 2 ))
{
    alert("Please enter correct email ID")
    return false;
}

නැතිනම් ඔබට jQuery භාවිතා කළ හැකිය . ඇතුළත නීති අර්ථ දක්වන්නේ:

eMailId: {
    required: true,
    email: true
}

1
abc@xyzයනු ඔබේ රීජෙක්ස් විසින් හඳුනා නොගත් පරිපූර්ණ වලංගු විද්‍යුත් තැපෑලකි.
ටෝටෝ

3
නැත. නිවැරදි ඊමේල් රටාව something@something.something, abc @ xyz එම රටාවට නොගැලපේ. එබැවින් එය වලංගු ලිපිනයක් නොවේ.
ඕකිඩ්


5
ඔබ විකිපීඩියා පිටුව කළාද? TLD යනු වලංගු ධාරක නාමයකි. ඒ නිසා abc@tld, වලංගු විද්යුත්-තැපැල් ලිපිනයක් ඇත.
ටෝටෝ

2
ඊමේල් ලිපිනයක් වලංගු කිරීමට ඇති එකම ක්‍රමය ඊ-තැපෑලක් යැවීම සහ ප්‍රතිචාරය සඳහා රැඳී සිටීමයි. මේ හැරුණු විට, ඔබේ ලිපිනය RFC822 අනුකූලද යන්න පරීක්ෂා කළ හැකි යූආර්එල් එකක් මෙහි ඇත: mathic-beasts.com/~pdw/cgi-bin/emailvalidate . Abc @ xyz RFC822 සඳහා වලංගු ලිපිනයක් බව ඔබට පෙනේ.
ටෝටෝ

14

Regex update 2018! මේක උත්සාහ කරන්න

let val = 'email@domain.com';
if(/^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val)) {
   console.log('passed');
}

යතුරු ලියනය අනුවාදය සම්පූර්ණයි

//
export const emailValid = (val:string):boolean => /^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val);

වැඩි විස්තර https://git.io/vhEfc


සම්මත විද්‍යුත් තැපෑලක් සඳහා මෙය අසමත් විය
රික්ස්

1
Ick රික්ස් මෙය සත්‍ය නොවේ. කරුණාකර නැවත පරීක්ෂා කරන්න
malimo

13

TLD හි පැවැත්ම පරීක්ෂා නොකරන විසඳුමක් අසම්පූර්ණයි.

මෙම ප්‍රශ්න සඳහා සෑම පිළිතුරක්ම පාහේ යෝජනා කරන්නේ ඊමේල් ලිපින වලංගු කිරීම සඳහා රීජෙක්ස් භාවිතා කිරීමයි. මම හිතන්නේ රෙජෙක්ස් හොඳ වන්නේ වලංගු වලංගු භාවයකට පමණි. ඊමේල් ලිපින වලංගු කිරීම සත්‍ය වශයෙන්ම වෙනම ගැටළු දෙකක් බව පෙනේ:

1- විද්‍යුත් තැපැල් ආකෘතිය වලංගු කිරීම: ආර්එෆ්සී 5322 හි ඊමේල් ආකෘතිය හා රටාව සමඟ විද්‍යුත් තැපෑල අනුකූලද යන්න සහ ටීඑල්ඩී සැබවින්ම පවතින්නේද යන්න තහවුරු කර ගැනීම. සියලුම වලංගු TLD ලැයිස්තුවක් මෙහි සොයාගත හැකිය .

උදාහරණයක් ලෙස, ලිපිනය example@example.cccරීජෙක්ස් පසුකර ගියද , එය වලංගු විද්‍යුත් තැපෑලක් නොවේ, මන්ද cccඑය IANA විසින් ඉහළ මට්ටමේ වසමක් නොවන බැවිනි .

: 2- වග ඇත්තටම ඊ-තැපැල් පවතී කිරීම මේ දේ සඳහා, එකම විකල්පය වන්නේ පරිශීලකයන් ඊ-තැපැල් යැවීමට .


13

ඊමේල් ලිපිනය වලංගු කිරීම සඳහා රීජෙක්ස්

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+

RFC5322: tools.ietf.org/html/rfc5322 හි ඔබේ regexp මට නොපෙනේ - යම් වැරැද්දක් තිබේද?
Kamil Kiełczewski

"හොඳම රීජෙක්ස්"? මෙහි යම් ආකාරයක පැහැදිලි කිරීමක් විය හැකිද?
connectyourcharger

සියල්ලන්ගේ හොඳම විසඳුම එය යැයි ඔබ කීවේ ඇයි, කරුණාකර ඔබට තව ටිකක් පැහැදිලි කළ හැකිද?
නන්කෝඩර්

මම "මෙතෙක් හොඳම රීජෙක්ස්" ලියා ඇත්තේ මන්දැයි මට මතක නැත. සමාවෙන්න යාලුවනේ එය ඔබට කරදරයක් නම්.
ප්‍රභාත් කසෙරා

12

ඊමේල් ලිපින වලංගු කිරීම සඳහා සාමාන්‍ය ප්‍රකාශන භාවිතා කිරීම පිළිබඳ ඉතා හොඳ සාකච්ඡාවක් මෙන්න; " නිත්‍ය ප්‍රකාශන වලංගු කරන විද්‍යුත් තැපැල් ලිපිනය සංසන්දනය කිරීම "

යොමු අරමුණු සඳහා ජාවාස්ක්‍රිප්ට් අනුකූල වන වත්මන් ඉහළ ප්‍රකාශනය මෙන්න:

/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i

9
-1 සුදු ලැයිස්තු ගත කිරීම අපේක්ෂා කළ යුතු බොහෝ දේ - විශේෂයෙන් ඔබට මඟ හැරුණි .jobs. ඊට අමතරව, සජීවී හැඳුනුම්පත් තිබේ (ඒවායින් බොහොමයක් අනුමත කර ඇත්තේ ඔබගේ තනතුරෙන් පසුව පමණි - උදා: .中國2010 ජුනි මාසයේදී; නමුත් බොහෝ ඒවා වසර ගණනාවක් තිස්සේ ක්‍රියාත්මක වෙමින් පවතී).
පිස්ක්වෝර්

2
-1 නියත ඉහළ මට්ටමේ වසම් භාවිතා නොකරන්න. සෑම විටම (සහ උදාහරණයක් ලෙස 2013 ඇත) නව tld එකතු කළ හැකිය.
මිහෝ

නව ටීඑල්ඩී 100 ක් තහවුරු කර ඇත. මෙම පිළිතුර වලංගු නොවන අතර එය කිසි විටෙකත් භාවිතා නොකළ යුතුය.
ඩීන් මීහාන්

ඔව්. මම එය 2011 දී පවසා ඇති අතර, මම නැවත එය කියමි: “විශේෂ” වසම්වල සුදු ලැයිස්තුවක් කාලයත් සමඟ නරක අතට හැරෙනු ඇත, වැඩි ටීඑල්ඩී අනුමත කර ඇති බැවින්. ඉහත සුදු ලැයිස්තුවට නොගැලපෙන සම්පූර්ණයෙන්ම වලංගු TLD 100 කට වඩා තිබේ: en.wikipedia.org/wiki/List_of_Internet_top-level_domains
පිස්ක්වෝර් ගොඩනැගිල්ලෙන් පිටව ගියේය

එය 2015. ඔබේ ප්‍රකාශනය ප්‍රායෝගික නොවේ. ඔබ මෙම පිළිතුර පහතින් ගත යුතුය, නමුත් ඔබ මෙම ප්‍රකාශනය දැමූ සියලුම පිටු නිවැරදි කිරීමට ඔබ කාර්යබහුල විය හැකිය. හරිද?
එරික් ලෙරෝයි

12

පෙනෙන විදිහට, එය එයයි:

/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i

Http://fightingforalostcause.net/misc/2006/compare-email-regex.php වෙතින් ලබා ගත්ඔක්තෝබර් 1 '10 දින ඇත.

එහෙත්, ඇත්ත වශයෙන්ම, එය ජාත්‍යන්තරකරණය නොසලකා හැරේ.


12

ඊට වෙනස්ව ලේනුන්ට , මෙන්න සංකීර්ණ විසඳුමක්, නමුත් එය ඊමේල් නිසි ලෙස වලංගු කිරීමේ ප්‍රබල කාර්යයක් කරයි:

function isEmail(email) { 
    return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);
} 

එසේ භාවිතා කරන්න:

if (isEmail('youremail@yourdomain.com')){ console.log('This is email is valid'); }

10
== trueඔබේ ආදර්ශය ඔබට අවශ්‍ය නැත .
ලූක් ඇල්ඩර්ටන්

11

මගේ දැනුම නිත්‍ය ප්‍රකාශන එතරම් හොඳ නැත. ඒ නිසාම මම සාමාන්‍ය සින්ටැක්ස් එක සරල නිත්‍ය ප්‍රකාශනයකින් පළමුව පරීක්ෂා කර පසුව වෙනත් කාර්යයන් සමඟ වඩාත් නිශ්චිත විකල්ප පරීක්ෂා කරමි. මෙය හොඳම තාක්ෂණික විසඳුම නොවිය හැකි නමුත් මේ ආකාරයෙන් මම වඩාත් නම්‍යශීලී හා වේගවත් වෙමි.

මට හමු වූ වඩාත් සුලභ දෝෂ වන්නේ අවකාශයන් (විශේෂයෙන් ආරම්භයේ සහ අවසානයේ) සහ ඉඳහිට ද්විත්ව තිතක්.

function check_email(val){
    if(!val.match(/\S+@\S+\.\S+/)){ // Jaymon's / Squirtle's solution
        // Do something
        return false;
    }
    if( val.indexOf(' ')!=-1 || val.indexOf('..')!=-1){
        // Do something
        return false;
    }
    return true;
}

check_email('check@thiscom'); // Returns false
check_email('check@this..com'); // Returns false
check_email(' check@this.com'); // Returns false
check_email('check@this.com'); // Returns true

10
<form name="validation" onSubmit="return checkbae()">
    Please input a valid email address:<br />

    <input type="text" size=18 name="emailcheck">
    <input type="submit" value="Submit">
</form>

<script language="JavaScript1.2">
    var testresults
    function checkemail(){
        var str = document.validation.emailcheck.value
        var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
        if (filter.test(str))
            testresults = true
        else {
            alert("Please input a valid email address!")
            testresults = false
        }
        return (testresults)
    }
</script>

<script>
    function checkbae(){
        if (document.layers || document.getElementById || document.all)
            return checkemail()
        else
            return true
    }
</script>

සමහර විට ඔබ එය සමඟ යාමට පැහැදිලි කිරීමක් හෝ විස්තරයක් එකතු කළේ නම්? මම හිතන්නේ නැහැ ඔබට ඇත්තටම ඕනෑම html එකක් පෙන්විය යුතුයි කියා; සියලු මිනිසුන් සැලකිලිමත් වන්නේ ජාවාස්ක්‍රිප්ට් සහ රීජෙක්ස් ය. ඔබ ඔබේ පිළිතුර ජැස්ක්‍රිප්ට් වෙත පමණක් අඩු කර, ඒ සමඟ යාමට කුඩා බ්ලර්බ් එකක් එකතු කළහොත්, මම ඔබට උච්චාරණයක් දෙන්නෙමි.
bgmCoder

9

සියලුම ඊමේල් ලිපින පරීක්ෂණ අවස්ථා සමත් ජේඑස් හි රීජෙක්ස් එකක් මම සොයමින් සිටියෙමි:

  • email@example.com වලංගු ඊමේල්

  • firstname.lastname@example.com ලිපින ක්ෂේත්‍රයේ තිතක් ඊමේල් හි අඩංගු වේ

  • email@subdomain.example.com ඊමේල් හි උප ඩොමේන් සමඟ තිතක් අඩංගු වේ

  • firstname+lastname@example.com ප්ලස් ලකුණ වලංගු චරිතයක් ලෙස සැලකේ

  • email@192.0.2.123 වසම වලංගු IP ලිපිනයකි

  • email@[192.0.2.123] IP ලිපිනය වටා ඇති වර්ග වරහන වලංගු යැයි සැලකේ

  • “email”@example.com විද්‍යුත් තැපෑල වටා ඇති මිල ගණන් වලංගු යැයි සැලකේ

  • 1234567890@example.com ලිපිනයේ ඉලක්කම් වලංගු වේ

  • email@domain-one.example ඩොමේන් නාමයේ ඉරක් වලංගු වේ

  • _______@example.com ලිපින ක්ෂේත්‍රයෙහි යටි ඉරි වලංගු වේ

  • email@example.name .name වලංගු ඉහළ මට්ටමේ වසම් නාමයකි

  • email@example.co.jp ඉහළ මට්ටමේ ඩොමේන් නාමය වලංගු යැයි සලකනු ලැබේ (භාවිතා කිරීම co.jp මෙහි උදාහරණයක් ලෙස )

  • firstname-lastname@example.com ලිපින ක්ෂේත්‍රයේ ඉරක් වලංගු වේ

මෙන්න අපි යනවා :

http://regexr.com/3f07j

හෝ රීජෙක්ස්:

Regex = /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@[*[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+]*/

8

ASP.NET MVC තුළ මයික්‍රොසොෆ්ට් විසින් සපයනු ලබන නිත්‍ය ප්‍රකාශනය වේ

/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/

මා මෙහි පළ කරන්නේ එය දෝෂ සහිත අවස්ථාවක - එය සැමවිටම මගේ අවශ්‍යතා සඳහා පරිපූර්ණ වූවත්.


1
ඊ-තැපෑලෙහි නම කොටසේ + ගේ ඉඩ නොදේ.
පෝල් ගෝ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.