සාමාන්‍ය ප්‍රකාශනයක් භාවිතා කරමින් විද්‍යුත් තැපැල් ලිපිනයක් වලංගු කරන්නේ කෙසේද?


3321

වසර ගණනාවක් පුරා මම සෙමෙන් වර්ධනය කර සාමාන්ය ලෙස ඔවුන් සේවාදායකය කොටසක් ලෙස IP ලිපිනය භාවිතා නොකරන උපකල්පනය, බොහෝ ඊ-තැපැල් ලිපින නිවැරදිව මනාව තහවුරු බව.

මම එය PHP වැඩසටහන් කිහිපයක භාවිතා කරන අතර එය බොහෝ විට ක්‍රියාත්මක වේ. කෙසේ වෙතත්, වරින් වර මා එය භාවිතා කරන වෙබ් අඩවියක් සමඟ ගැටළුවක් ඇති අයෙකු හා සම්බන්ධ වන අතර, මම යම් වෙනස් කිරීමක් කිරීමට සිදු වේ (ඉතා මෑතකදී මම තේරුම් ගත්තා මම අක්ෂර 4 කින් යුත් ටීඑල්ඩී වලට ඉඩ නොදෙන බව).

ඊමේල් වලංගු කිරීම සඳහා ඔබ දැක ඇති හෝ දැක ඇති හොඳම නිත්‍ය ප්‍රකාශනය කුමක්ද?

කෙටි ප්‍රකාශන කිහිපයක් භාවිතා කරන ශ්‍රිත භාවිතා කරන විසඳුම් කිහිපයක් මම දැක ඇත්තෙමි, නමුත් වඩා සංකීර්ණ ශ්‍රිතයක කෙටි ප්‍රකාශන කිහිපයක් වෙනුවට සරල ශ්‍රිතයක එක් දිගු සංකීර්ණ ප්‍රකාශනයක් මා සතුව ඇත.



5
IDNA නිවැරදිව සංයුති කර ඇති බව තහවුරු කළ හැකි රීජෙක්ස් තොග හුවමාරුවට නොගැලපේ. (කැනොනිකල්කරණය පිළිබඳ නීති රීජෙක්ස් සැකසීමට සැබවින්ම නුසුදුසු වූ අතර විශේෂයෙන් නුසුදුසු විය)
ජේසන්


සමහර අවස්ථාවල දී රීජෙක්ස් විචල්‍ය විය හැකි අතර, ඊමේල් කොන් එකකට ඉඩක් අඩංගු විය හැකි අතර, වෙනත් අවස්ථාවල දී එයට කිසිදු අවකාශයක් අඩංගු විය නොහැක.
Ṃųỻịgǻňạcểơửṩ

Answers:


2444

මෙම සම්පූර්ණ නේවාසික විදේශ ව්යවහාර මුදල් 822 අනුකූල regex නිසා එහි දිග අකාර්යක්ෂම හා අප්රකට වේ. වාසනාවකට මෙන්, RFC 822 දෙවරක් අභිබවා ගිය අතර ඊමේල් ලිපින සඳහා වර්තමාන පිරිවිතර RFC 5322 වේ. RFC 5322 මිනිත්තු කිහිපයක් අධ්‍යයනය කර සැබෑ භාවිතය සඳහා ප්‍රමාණවත් තරම් කාර්යක්ෂම නම් තේරුම් ගත හැකි රීජෙක්ස් වෙත යොමු කරයි.

එක් RFC 5322 අනුකූල රීජෙක්ස් පිටුවේ ඉහළින් http://emailregex.com/ හි සොයාගත හැකි නමුත් අන්තර්ජාලය පුරා පාවෙන IP ලිපින රටාව දෝෂයක් සමඟ භාවිතා කරයි 00. තිත්-වෙන් කළ ලිපිනය, එය නීති විරෝධී ය. එහි ඉතිරි කොටස RFC 5322 ව්‍යාකරණයට අනුකූල වන අතර grep -Poනඩු ඩොමේන් නාම, අයිපී ලිපින, නරක, සහ උපුටා දැක්වීම් සහිතව සහ රහිතව ගිණුම් නම් ඇතුළුව පරීක්ෂණ කිහිපයක් සමත් වේ.

00IP රටාවේ ඇති දෝෂය නිවැරදි කරමින් , අපි වැඩ කරන හා තරමක් වේගවත් රීජෙක්ස් ලබා ගනිමු. (තථ්‍ය කේතය සඳහා සලකුණු කරන ලද අනුවාදය සීරීමට ලක් කරන්න.)

(?: [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])? | \ [(? :( ?:( 2 (5) [0-5] | [0-4] [0-9]) | 1 [0-9] [0-9] | [1-9]? [0-9])) \.) {3} ( ? :( 2 (5 [0-5] | [0-4] [0-9]) | 1 [0-9] [0-9] | [1-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]) +) \])

හෝ:

(?:[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])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-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])+)\])

මෙතන සටහන පිළිබඳ පරිමිත රාජ්ය යන්ත්රය ඉහත regexp සඳහා regexp තමාට වඩා පැහැදිලි වන රූප විස්තරය මෙහි ඇතුළත් කරන්න

පර්ල් සහ පීසීආර්ඊ හි වඩාත් නවීන රටා (උදා: පීඑච්පී හි රීජෙක්ස් පුස්තකාලය) RFC 5322 නිවැරදිව විග්‍රහ කළ හැකිය . පයිතන් සහ සී # වලටද එය කළ හැකිය, නමුත් ඔවුන් එම පළමු දෙකෙන් වෙනස් සින්ටැක්ස් භාවිතා කරයි. කෙසේ වෙතත්, ඔබට අඩු බලවත් රටා-ගැලපෙන භාෂාවන්ගෙන් එකක් භාවිතා කිරීමට බල කෙරෙන්නේ නම්, සැබෑ විග්‍රහයක් භාවිතා කිරීම වඩාත් සුදුසුය.

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

ඔබ එයට ඇතුළු වූ පුද්ගලයාගේ ලිපිනය ලැබී ඇති බව දැන ගැනීමට ඇති එකම ක්‍රමය තහවුරු කිරීමේ ටෝකන වේ. බොහෝ තැපැල් ලැයිස්තු දැන් ලියාපදිංචි වීම තහවුරු කිරීම සඳහා එම යාන්ත්‍රණය භාවිතා කරන්නේ මේ නිසා ය. සියල්ලට පසු, ඕනෑම කෙනෙකුට පහත් කළ හැකි අතර president@whitehouse.gov, එය නීත්‍යානුකූල යැයි පවා විග්‍රහ කරනු ඇත, නමුත් එය අනෙක් අන්තයේ පුද්ගලයා විය නොහැක.

PHP සඳහා, ඔබ කළ යුතු නැත දී ඇති රටාව භාවිතා වලංගුකරණය, PHP නිවැරදි මාර්ගය සමග ඊ-තැපැල් ලිපිනය මම උපුටා වන සිට:

පොදු භාවිතය සහ පුළුල් බෑවුම් සහිත කේතීකරණය මඟින් වාර්තාගත විධිමත් ප්‍රමිතියට වඩා සීමිත වන විද්‍යුත් තැපැල් ලිපින සඳහා තථ්‍ය ප්‍රමිතියක් ස්ථාපිත කරනු ඇතැයි යම් අනතුරක් තිබේ.

අනෙක් සියලුම RFC නොවන රටාවන්ට වඩා එය හොඳ නැත. RFC 5322 පමණක් නොව RFC 822 පවා හැසිරවීමට තරම් බුද්ධිමත් නොවේ. මෙය කෙසේ වෙතත්.

ඔබට විසිතුරු හා පදාර්ථ ලබා ගැනීමට අවශ්‍ය නම්, සම්පූර්ණ රාජ්‍ය එන්ජිමක් ක්‍රියාත්මක කරන්න . නිත්‍ය ප්‍රකාශනයකට ක්‍රියා කළ හැක්කේ මූලික පෙරණයක් ලෙස පමණි. නිත්‍ය ප්‍රකාශනවල ඇති ගැටළුව නම්, යමෙකුගේ පරිපූර්ණ වලංගු විද්‍යුත් තැපැල් ලිපිනය අවලංගුයි (ව්‍යාජ ධනාත්මක) යැයි පැවසීම ඔබේ නිත්‍ය ප්‍රකාශනයට එය හැසිරවිය නොහැකි නිසා එය රළු සහ පරිශීලකයාගේ දෘෂ්ටිකෝණයෙන් අශිෂ්ට ය. ඒ සඳහා වන රාජ්‍ය එන්ජිමකට එක් එක් RFC අනුව විද්‍යුත් තැපැල් ලිපිනය විසුරුවා හරින බැවින් එය අවලංගු යැයි සලකනු ලබන විද්‍යුත් තැපැල් ලිපිනයන් වලංගු හා නිවැරදි කළ හැකිය. මෙය වැනි වඩාත් ප්‍රසන්න අත්දැකීමක් ලබා ගැනීමට මෙය ඉඩ දෙයි

නිශ්චිත විද්‍යුත් තැපැල් ලිපිනය 'myemail @ address, com' අවලංගුය. ඔබ අදහස් කළේ 'myemail@address.com' ද?

අදහස් ඇතුළුව ඊමේල් ලිපින වලංගු කිරීමද බලන්න . හෝ නිත්‍ය ප්‍රකාශන වලංගු කරන විද්‍යුත් තැපැල් ලිපිනය සංසන්දනය කිරීම .

නිත්‍ය ප්‍රකාශන දෘශ්‍යකරණය

Debuggex Demo


180
ඔබ කීවේ "හොඳ නිත්‍ය ප්‍රකාශනයක් නැත" යනුවෙනි. මෙය සාමාන්‍ය හෝ විද්‍යුත් තැපැල් ලිපින වලංගු කිරීම සඳහා විශේෂිතද?
ටොමලක්

37
Oma ටොමලක්: ඊමේල් ලිපින සඳහා පමණි. බෝර්ට්ස්මේයර් පැවසූ පරිදි, RFC අතිශයින්ම සංකීර්ණයි
Luk

37
ඔබ සඳහන් කරන ලිනක්ස් ජර්නල් ලිපිය කරුණු කිහිපයකින් සත්‍ය වශයෙන්ම වැරදිය. විශේෂයෙන් ලවෙල් පැහැදිලිවම RFC3696 වෙත දෝෂය කියවා නැති අතර RFC හි ප්‍රකාශිත අනුවාදයේ සමහර දෝෂ නැවත නැවත කරයි. වැඩි විස්තර මෙහි: domicsayers.com/isemail
ඩොමිනික් සයර්ස්

9
සියලුම වලංගු විද්‍යුත් තැපැල් ලිපිනයන් වලංගු කිරීම සඳහා ජෙෆ් ඇට්වුඩ්ට මෙම බ්ලොග් සටහනේ සුන්දර රීජෙක්ස් ඇත
CMircea

5
බව සටහන වත්මන් HTML5 පිරිවිතර මුල් RFCs වඩා හිතාමතා තවත් තද බව ඊ-තැපැල් වර්ගයේ ආදාන වලංගු සඳහා regex හා ABNF ඇතුළත් වේ.
සමමුහුර්ත

747

ඊමේල් ලිපින වලංගු කිරීම සඳහා ඔබ සාමාන්‍ය ප්‍රකාශන භාවිතා නොකළ යුතුය.

ඒ වෙනුවට, මේ ආකාරයට MailAddress පන්තිය භාවිතා කරන්න :

try {
    address = new MailAddress(address).Address;
} catch(FormatException) {
    // address is invalid
}

මෙම MailAddressපන්ති RFC822 සමග පූර්ණ අනුව ලිපිනය තහවුරු කිරීම සඳහා BNF ව්යාකරණ විග්රහ භාවිතා කරයි.

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

  • "user1@hotmail.com; user2@gmail.com"
  • "user1@hotmail.com; user2@gmail.com; user3@company.com"
  • "පරිශීලක දර්ශන නාමය user3@company.com"
  • "user4 @ company.com"

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

bool isValid = false;

try
{
    MailAddress address = new MailAddress(emailAddress);
    isValid = (address.Address == emailAddress);
    // or
    // isValid = string.IsNullOrEmpty(address.DisplayName);
}
catch (FormatException)
{
    // address is invalid
}

තව දුරටත්, තිතක් ඇති ලිපිනයක් user@company.MailAddress විසින් ද පිළිගනු ලැබේ.

ඔබට සැබවින්ම රීජෙක්ස් භාවිතා කිරීමට අවශ්‍ය නම්, මෙන්න එයයි :

(?: (?: \ r \ n)? [\ t]) * (?: (?: (?: [^ () <> @,;: \\ ". ] + (?: (?: (?: \ r \ n)? [\ t]
) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | "(?: [^ \" \ R \\] | \\. | (?: (?: \ r \ n)? [\ T])) * "(? :(?:
\ r \ n)? [\ t]) *) (?: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \ \ ". \ [\] \ 000- \ 031] + (? :( ?:(
?: \ r \ n)? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | "(?: [ ^ \ "\ r \\] | \\. | (?: (?: \ r \ n)? [ 
\ t])) * "(?: (?: \ r \ n)? [\ t]) *)) * @ (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 0
31] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\ ]])) | \ [([^ \ [\] \ r \\] | \\.) * \
] (?: (?: \ r \ n)? [\ t]) *) (?: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] +
(?: (?: (?: \ r \ n)? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]]) ) | \ [([^ \ [\] \ r \\] | \\.) * \] (?:
(?: \ r \ n)? [\ t]) *)) * | (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (? (?: (?: \ r \ n)? [\ t]) + | \ Z.
| (? = [\ ["() <>;,;: \\". \ [\]]) | "(?: [^ \" \ r \\] | \\. | (? :( ?: \ r \ n)? [\ t])) * "(?: (?: \ r \ n)
? [\ t]) *) * \ <(?: (?: \ r \ n)? [\ t]) * (?: @ (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \
r \ n)? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | \ [([^ \ [\ ] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [
 \ t]) *) (?: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)
? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | \ [([^ \ [\] \ r \ \] | \\.) * \] (?: (?: \ r \ n)? [\ t]
) *)) * (?:, @ (?: (?: \ r \ n)? [\ T]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [
 \ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ T]) *
) (?: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031 ] + (?: (?: (?: \ r \ n)? [\ t]
) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | \ [([^ \ [\] \ R \\] | \\ .) * \] (?: (?: \ r \ n)? [\ T]) *)) *)
*: (?: (?: \ r \ n)? [\ T]) *)? (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ r \ n)? [\ t]) +
| \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | "(?: [^ \" \ R \\] | \\. | ?: (?: \ r \ n)? [\ t])) * "(?: (?: \ r
\ n)? [\ t]) *) (?: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ " . \ [\] \ 000- \ 031] + (? :( ?:( ?:
| r \ n)? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | "(?: [^ \ "\ r \\] | \\. | (?: (?: \ r \ n)? [\ t
])) * "(?: (?: \ r \ n)? [\ T]) *)) * @ (?: (?: \ r \ n)? [\ T]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031
] + (?: (?: (?: \ r \ n)? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\] ])) | \ [([^ \ [\] \ r \\] | \\.) * \] (
?: (?: \ r \ n)? [\ t]) *) (?: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?
: (?: (?: \ r \ n)? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]]) | \ [([^ \ [\] \ r \\] | \\.) * \] (? :(?
: \ r \ n)? [\ t]) *)) * \> (?: (?: \ r \ n)? [\ t]) *) | (?: [^ () <> @ ,; : \\ ". \ [\] \ 000- \ 031] + (? :(?
: (?: \ r \ n)? [\ t]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | "(? : [^ \ "\ r \\] | \\. | (?: (?: \ r \ n)?
[\ t])) * "(?: (?: \ r \ n)? [\ t]) *) *: (?: (?: \ r \ n)? [\ t]) * (?: (?: (?: [^ () <> @,;: \\ ". \ [\] 
\ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\" . \ [\]])) | "(?: [^ \" \ r \\] |
\\. | (?: (?: \ r \ n)? [\ t])) * "(?: (?: \ r \ n)? [\ t]) *) (?: \. (? : (?: \ r \ n)? [\ t]) * (?: [^ () <>

@,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ [ "() <> @,;: \\". \ [\]])) | "
(?: [^ \ "\ r \\] | \\. | (?: (?: \ r \ n)? [\ t])) *" (?: (?: \ r \ n)? [ \ t]) *)) * @ (?: (?: \ r \ n)? [\ t]
) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T] + | \ Z | (? = [\ ["() <> @,;: \\
". \ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ T]) * ) (?: \. (?: (?: \ r \ n)? [\ t]) * (?
: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [
\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *)) * | (?: [^ () <> @,;: \\ ". \ [\] \ 000-
\ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [ \]])) | "(?: [^ \" \ r \\] | \\. | (|
?: (?: \ r \ n)? [\ t])) * "(?: (?: \ r \ n)? [\ t]) *) * \ <(?: (?: \ r \ n)? [\ t]) * (?: @ (?: [^ () <> @ ,;
: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ [" () <> @,;: \\ ". \ [\]])) | \ [([
^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ T]) *) (?: \. (?: (?: \ r (n)? [\ t]) * (?: [^ () <> @,;: \\ "
. \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @, ;: \\ ". \ [\]])) | \ [([^ \ [\
] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *)) * (?:, @ (?: (?: \ r \ n) )? [\ t]) * (?: [^ () <> @,;: \\ ". \
[\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\ ". \ [\]])) | \ [([^ \ [\] \
r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *) (?: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] 
\ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\" . \ [\]])) | \ [([^ \ [\] \ r \\]
| \\.) * \] (?: (?: \ r \ n)? [\ T]) *)) *) *: (?: (?: \ r \ n)? [\ T]) * )? (?: [^ () <> @,;: \\ ". \ [\] \ 0
00- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | "(?: [^ \" \ r \\] | \\
. | (?: (?: \ r \ n)? [\ T])) * "(?: (?: \ r \ n)? [\ T]) *) (?: \. (? :( ?: \ r \ n)? [\ t]) * (?: [^ () <> @,
;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? ) <> @,;: \\ ". \ [\]])) |" (?
: [^ \ "\ r \\] | \\. | (?: (?: \ r \ n)? [\ T])) *" (?: (?: \ r \ n)? [\ T. ]) *)) * @ (?: (?: \ r \ n)? [\ t]) *
(?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\".
\ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *) ( ?: \. (?: (?: \ r \ n)? [\ t]) * (?: [
^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | ( ? = [\ ["() <> @,;: \\". \ [\]
])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ T]) *)) * \> ( ?: (?: \ r \ n)? [\ t]) *) (?:, \ s * (
?: (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\
". \ [\]])) |" (?: [^ \ "\ r \\] | \\. | (?: (?: \ r \ n)? [\ t])) *" (? : (?: \ r \ n)? [\ t]) *) (?: \. (? :(
?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (? :( ?:(? : \ r \ n)? [\ t]) + | \ Z | (? = [
| ["() <> @,;: \\". \ [\]])) | "(?: [^ \" \ r \\] | \\. | (?: (?: \ r \ n)? [\ t])) * "(?: (?: \ r \ n)? [\ t
]) *)) * @ (?: (?: \ r \ n)? [\ T]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T.
]) + | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | \ [([^ \ [\] \ R \\] | \ \.) * \] (?: (?: \ r \ n)? [\ t]) *) (?
: \. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + ( ?: (?: (?: \ r \ n)? [\ t]) + |
\ Z | (? = [\ ["() <>;,;: \\". \ [\]])) | \ [([^ \ [\] \ R \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *)) * | (?:
[^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | (? = [\ ["() <> @,;: \\". \ [\
]])) | "(?: [^ \" \ r \\] | \\. | (?: (?: \ r \ n)? [\ T])) * "(?: (?: \ r \ n)? [\ t]) *) * \ <(?: (?: \ r \ n)
? [\ t]) * (?: @ (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ n)? [\ t]) + | \ Z | (? = [\ ["
() <> @,;: \\ ". \ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *) (?: \. (?: (?: \ r \ n)
? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ r \ n) [\ t]) + | \ Z | (? = [\ ["() <>

@,;: \\ ". \ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *)) * (?:, @ (?: (?: \ r \ n)? [
 \ t]) * (?: [^ () <>;,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ r \ n)? t]) + | \ Z | (? = [\ ["() <> @,
;: \\ ". \ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *) (?: \. (?: (?: \ r \ n)? [\ t]
) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T] + | \ Z | (? = [\ ["() <> @,;: \\
". \ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ T]) * )) *) *: (?: (?: \ r \ n)? [\ T]) *)?
(?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ R \ n)? [\ T]) + | \ Z | (? = [\ ["() <> @,;: \\".
\ [\]])) | "(?: [^ \" \ r \\] | \\. | (?: (?: \ r \ n)? [\ t])) * "(? :( ?: \ r \ n)? [\ t]) *) (?: \. (? :(?)
(r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ r \ n)? [\ t]) + | \ Z | (? = [\ [
"() <> @,;: \\". \ [\]])) | "(?: [^ \" \ r \\] | \\. | (?: (?: \ r \ n) ? [\ t])) * "(?: (?: \ r \ n)? [\ t])
*)) * @ (?: (?: \ r \ n)? [\ T]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ r \ n)? [\ t])
+ | \ Z | (? = [\ ["() <> @,;: \\". \ [\]])) | \ [([^ \ [\] \ R \\] | \\. ) * \] (?: (?: \ r \ n)? [\ T]) *) (?: \
. (?: (?: \ r \ n)? [\ t]) * (?: [^ () <> @,;: \\ ". \ [\] \ 000- \ 031] + (?: (?: (?: \ r \ n)? [\ t]) + | \ Z.
| (? = [\ ["() <>;,;: \\". \ [\]])) | \ [([^ \ [\] \ r \\] | \\.) * \] (?: (?: \ r \ n)? [\ t]) *)) * \> (? :(
?: \ r \ n)? [\ t]) *)) *) ?; \ s *)

26
.NET 4.0 හි ඇති MailAddress පන්තිය පෙර සංස්කරණ වලට වඩා විද්‍යුත් තැපැල් ලිපින වලංගු කිරීමට වඩා හොඳ බව ඔබට පෙනී යනු ඇත. මම ඒ සඳහා සැලකිය යුතු වැඩි දියුණු කිරීම් කිහිපයක් කළා.
ජෙෆ් ටකර්

7
මම හිතන්නේ එය එක්තරා ආකාරයක ... ක්‍රියා නොකරයි ... සරල අයිඩී සඳහා. a @ b වලංගු නොවේ. ar@b.com ගැලපෙන්නේ ar @ b වන තුරු පමණි .com නොගැලපේ. කෙසේ වෙතත්, "මම මම" @ [10.10.10.10] වැනි දෙයක් ක්‍රියාත්මක වේ! :)
Raze

5
"R <body / onload = alert (' lol.com?'+document.cookies ) @aa> "එය පර්ල්ගේ විද්‍යුත් තැපෑලෙහි වලංගු ඊමේල් ලිපිනයකි :: වලංගු (එය විශාල රිජෙක්ස්
මැතිව් ලොක්

9
Att මැතිව්ලොක්: එය ඊට වඩා නරක දෙයක් නොවේ fake@not-a-real-domain.name. XSS වැළැක්වීම සඳහා ඔබ විද්‍යුත් තැපැල් වලංගුකරණය මත විශ්වාසය නොතැබිය යුතුය .
ස්ලැක්ස්

10
@MatthewLock: අංක කිරීමට ඔබට අවශ්ය පැන SQL විමසුම් (හෝ, වඩා හොඳ තවමත්, භාවිතා පරාමිතීන්). සනීපාරක්ෂාව නිසි ආරක්ෂාවක් නොවේ.
ස්ලැක්ස්

536

මෙම ප්‍රශ්නය බොහෝ දේ අසනු ලැබේ, නමුත් මම සිතන්නේ ඔබ පසුපසට ගොස් ඊමේල් ලිපිනයන් කෘතිමව වලංගු කිරීමට අවශ්‍ය ඇයි කියා ඔබෙන්ම අසාගත යුතු බවයි. ඇත්තටම ලැබෙන ප්‍රයෝජනය කුමක්ද?

  • එය පොදු යතුරු ලියනය අල්ලා නොගනී.
  • එය අවලංගු හෝ සාදන ලද ඊමේල් ලිපින ඇතුළු කිරීම හෝ වෙනත් කෙනෙකුගේ ලිපිනයක් ඇතුළත් කිරීම වළක්වන්නේ නැත.

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


92
සරල වැරැද්දක් හසු කර ගැනීම සඳහා ඔවුන් යම් දෙයක් සේවාදායකයාගේ පැත්තෙන් වලංගු කිරීම සඳහා ක්ෂේත්‍රයට ඇතුළු කර ඇත්දැයි පරීක්ෂා කිරීම වටී - නමුත් පොදුවේ ඔබ නිවැරදිය.
මාටින් බෙකට්

8
මාටින්, මම ඔබට +1 ලබා දුන්නා, පසුව කියවීමට පමණක් foobar @ dk වලංගු විද්‍යුත් තැපෑලක් බව. එය එතරම් ලස්සන නොවනු ඇත, නමුත් ඔබට RFC අනුකූල වීමට සහ සාමාන්‍ය බුද්ධිය භාවිතා කිරීමට අවශ්‍ය නම්, ඔබ මෙවැනි අවස්ථා හඳුනාගෙන එය නිවැරදි බව තහවුරු කර ගැනීමට පරිශීලකයාගෙන් ඉල්ලා සිටිය යුතුය.
philfreo

106
@olavk: යමෙකු යතුරු ලියනයකට ඇතුළු වුවහොත් (උදා :) me@hotmail, ඔවුන් පැහැදිලිවම ඔබේ තහවුරු කිරීමේ විද්‍යුත් තැපෑල ලබා නොගනී, එවිට ඔවුන් කොහේද? ඔවුන් තවදුරටත් ඔබේ වෙබ් අඩවියේ නොමැති අතර ඔවුන් කල්පනා කරන්නේ ඔවුන්ට ලියාපදිංචි වීමට නොහැකි වූයේ මන්ද යන්නයි. ඇත්තෙන්ම ඔවුන් එසේ නොවේ - ඔවුන් ඔබ ගැන සම්පූර්ණයෙන්ම අමතක කර ඇත. කෙසේ වෙතත්, ඔවුන් ඔබ සමඟ සිටියදී රීජෙක්ස් සමඟ මූලික සනීපාරක්ෂක පරීක්‍ෂණයක් කළ හැකි නම්, එවිට ඔවුන්ට එම දෝෂය කෙලින්ම හසු කර ගත හැකි අතර ඔබට සතුටුදායක පරිශීලකයෙකු සිටී.
nickf

5
Ac ජැක්විස්: ඔබ විශිෂ්ට කරුණක් ඉදිරිපත් කරනවා. එය RFC අනුව එක්රැස් වන නිසා එයින් අදහස් කරන්නේ එය ඇත්ත වශයෙන්ම එම පරිශීලකයාගේ ලිපිනය බවයි. එසේ නොමැති නම්, එම president@whitehouse.govලිපිනයන් සියල්ලම පෙන්නුම් කරන්නේ ඉතා නෙට්බසි අණ දෙන නිලධාරියෙකි. :)
tchrist

39
එය කළු හෝ සුදු විය යුතු නැත. විද්‍යුත් තැපෑල වැරදියි නම්, එය පරිශීලකයාට දන්වන්න. පරිශීලකයාට ඉදිරියට යාමට අවශ්‍ය නම් ඔහුට ඉඩ දෙන්න. ඔබේ රීජෙක්ස් වලට අනුකූල වන ලෙස පරිශීලකයාට බල නොකරන්න, ඒ වෙනුවට, වැරැද්දක් සිදුවිය හැකි බව පරිශීලකයාට දැන ගැනීමට මෙවලමක් ලෙස රීජෙක්ස් භාවිතා කරන්න.
නින්ජනීර්

354

ඒ සියල්ල රඳා පවතින්නේ ඔබට කෙතරම් නිවැරදිද යන්න මතය. මගේ අරමුණු සඳහා, මම උත්සාහ කරන්නේ bob @ aol.com(ඊමේල් වල අවකාශය) හෝ steve(කිසිසේත් වසමක් නැත) හෝ mary@aolcom(.com ට පෙර කාල පරිච්ඡේදයක් නැත ) වැනි දේවල් තබා ගැනීමට මම උත්සාහ කරමි.

/^\S+@\S+\.\S+$/

නිසැකවම, එය වලංගු ඊමේල් ලිපින නොවන දේට ගැලපෙනු ඇත, නමුත් එය පොදු සරල දෝෂ ලබා ගැනීමේ කාරණයකි.

එම රීජෙක්ස් හි කළ හැකි වෙනස්කම් ගණනාවක් තිබේ (සහ සමහර ඒවා මෙම පිළිතුර සඳහා අදහස් දැක්වීම්වල ඇත), නමුත් එය සරල හා තේරුම් ගැනීමට පහසු වන අතර එය කදිම පළමු උත්සාහයකි.


6
එය වලංගු හා වැඩ කරන විද්‍යුත් තැපැල් ලිපිනයක් වන foobar k dk සමඟ නොගැලපේ (බොහෝ තැපැල් සේවාදායකයන් එය පිළිගන්නේ නැතිනම් හෝ
යමක්.කොම්

3
ඔව්, එය එසේ වනු ඇත. එය ඔබම අත්හදා බලන්නැයි මම යෝජනා කරමි. $ perl -le'print qαfoo@bar.co.uk} = ~ /^\S+@\S+\.\S+$/? q {Y}: q {N} '
ඇන්ඩි ලෙස්ටර්

7
Ic රිචඩ්: .ඇතුළත් කර ඇත \S.
ඩේවිඩ් තෝර්න්ලි

43
ජේ.ජේ.ජේ: ඔව්, එය බොහෝ කපටිකමට ගැලපේ. එය ගැලපෙනු ඇත & $ * # $ (@ $ 0 (%)) $ #.) & *) (* $, මටත් mary@aolcomවඩා, මම සම්පූර්ණ කුණු කසළට වඩා අමුතු ඇඟිලි තුඩක් අල්ලා ගැනීම ගැන සැලකිලිමත් වෙමි. YMMV
ඇන්ඩි ලෙස්ටර්

5
සං for ා පාලනය කිරීම සඳහා @: /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/ jsfiddle.net/b9chris/mXB96
ක්‍රිස් මොස්චිනි

338

එය ඔබ වඩාත්ම අදහස් කරන දේ මත රඳා පවතී: ඔබ වලංගු සෑම විද්‍යුත් තැපැල් ලිපිනයක්ම අල්ලා ගැනීම ගැන කතා කරන්නේ නම් පහත සඳහන් දෑ භාවිතා කරන්න:

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)

( http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html ) ඔබ සරල දෙයක් සොයන්නේ නම් නමුත් එය වලංගු ඊමේල් ලිපින අල්ලා ගනු ඇත.

"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"

සංස්කරණය කරන්න: සබැඳියෙන්:

මෙම නිත්‍ය ප්‍රකාශනය වලංගු වන්නේ කිසියම් අදහස් දැක්වීමක් ඉවත් කර සුදු අවකාශය වෙනුවට ආදේශ කර ඇති ලිපින පමණි (මෙය මොඩියුලය මඟින් සිදු කරයි).


10
එය සියලු ලිපිනයන් සමඟ නොගැලපේ, සමහර ඒවා පළමුව පරිවර්තනය කළ යුතුය. සබැඳියෙන්: "මෙම නිත්‍ය ප්‍රකාශනය වලංගු වන්නේ කිසියම් අදහස් දැක්වීමක් ඉවත් කර සුදු අවකාශය වෙනුවට ආදේශ කර ඇති ලිපින පමණි (මෙය මොඩියුලය මඟින් සිදු කරයි)."
චැස්. ඕවන්ස්

47
email addressදෙවැන්න හරහා වැරදියට ගමන් කරන නමුත් දිගු රීජෙක්ස් විසින් අල්ලා ගන්නා ලද සමහරක් පිළිබඳ උදාහරණයක් මට දිය හැකිද ?
ලේසර්

4
මම වරක් එයට ආදරය කළද, එය RFC 822 වලංගු කරන්නෙකු මිස RFC 5322 එකක් නොවේ.
tchrist

24
AzLazer in..valid @ example.com සරල උදාහරණයක් වනු ඇත. දේශීය කොටසෙහි නොකඩවා නොකියවූ තිත් දෙකක් තබා ගැනීමට ඔබට අවසර නැත.
රැන්ඩල් ෂ්වාට්ස්

5
Ik මිහායිල් පර්ල් නමුත් ඔබ එය ඇත්ත වශයෙන්ම භාවිතා නොකළ යුතුය.
හොඳ පුද්ගලයා

287

[යාවත්කාලීන කරන ලදි] ඊමේල් ලිපින වලංගුකරණය පිළිබඳව මා දන්නා සෑම දෙයක්ම මෙහි සංයුක්ත කර ඇත: http://isemail.info , එය දැන් වලංගු කිරීම පමණක් නොව, ඊමේල් ලිපින සමඟ ඇති ගැටළු හඳුනා ගනී. වලංගු කිරීම පිළිතුරේ කොටසක් පමණක් බව මෙහි ඇති බොහෝ අදහස් සමඟ මම එකඟ වෙමි; මගේ රචනාව http://isemail.info/about හි බලන්න .

මා දන්නා පරිදි, ලබා දී ඇති නූලක් වලංගු ඊමේල් ලිපිනයක් ද නැද්ද යන්න නිශ්චිතවම ඔබට පවසන එකම වලංගුකරුවා is_email () පවතී. මම නව සංස්කරණයක් http://isemail.info/ වෙත උඩුගත කළෙමි.

මම කැල් හෙන්ඩර්සන්, ඩේව් චිල්ඩ්, ෆිල් හැක්, ඩග් ලුවෙල්, ආර්එෆ්සී 5322 සහ ආර්එෆ්සී 3696 වෙතින් පරීක්ෂණ නඩු එකතු කළෙමි. මට සොයා ගත හැකි සියලුම නිදහස් වලංගු කරන්නන්ට එරෙහිව මම මේ සියලු පරීක්ෂණ පැවැත්වුවෙමි.

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

විශේෂයෙන් RFC 3696 ට එරෙහි වැරැද්ද පිළිබඳව ජනතාව දැනුවත් විය යුතුය . කැනොනිකල් උදාහරණ තුනක් ඇත්ත වශයෙන්ම අවලංගු ලිපින වේ. ලිපිනයක උපරිම දිග අක්ෂර 254 හෝ 256 මිස 320 නොවේ .


මෙම වලංගු කරන්නා ද නිවැරදි බව පෙනේ. [... කාලය ගත වේ ...] හ්ම්, එය RFC 5322 ලෙස පෙනේ, 3693 හෝ එරාටා නොවේ.
tchrist

1
ඉතා කදිමයි. මෙන්න අපට ලස්සන රචනයක් ලැබෙනවා පමණක් නොව, අපට වලංගු කිරීමේ පරීක්ෂකයෙකු මෙන්ම බාගත කිරීම සඳහා පුස්තකාලයක් ද ලැබේ. හොඳ පිළිතුරක්!
bgmCoder

ඔබගේ වලංගු කරන්නා දණ්ඩ කේතයට සහය නොදක්වයි (RFC 3492). name@öäü.at වලංගු ලිපිනයක් විය හැකිය. (එය name@xn--4ca9at.at ලෙස පරිවර්තනය වේ)
ජොසෙෆ් පවසන්නේ මොනිකා

හායි ose ජොසෙෆ්. name@xn--4ca9at.atමෙම කේතය වලංගු කිරීම ගැන මිස අර්ථ නිරූපණය කිරීම නිසා ඔබ වලංගු කිරීමට උත්සාහ කළ යුතුය . ඔබ ද pun ුවම් කේත
ඩොමිනික් සයර්ස්

266

එක් වූ W3C HTML5 පිරිවිතර :

^[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])?)*$

සන්දර්භය:

, වලංගු විද්යුත්-තැපැල් ලිපිනය ද ABNF නිෂ්පාදනය [...] ගැලපෙන වැලක් වේ.

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

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

/^[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])?)*$/


12
මෙය සිත්ගන්නා සුළුය. එය RFC උල්ලං violation නය කිරීමකි, නමුත් හිතාමතාම කරන දෙයක් වන අතර එය සෙස්නේ බවට පත් කරයි. තාත්වික ලෝක උදාහරණය: gmail @ ට පෙර කොටසේ තිත් නොසලකා හරින අතර, එබැවින් ඔබේ විද්‍යුත් තැපෑල test@gmail.com නම් ඔබට පරීක්ෂා කිරීමට ඊමේල් යැවිය හැකිය. @ Gmail.com හෝ test .... @ gmail.com, එම ලිපිනයන් දෙකම RFC අනුව වලංගු නොවන නමුත් සැබෑ ලෝකයේ වලංගු වේ.
වැලන්ටිනාස්

මම හිතන්නේ අවසාන කොටස '*' වෙනුවට '+' විය යුතුය: ^ [a-zA-Z0-9.! # $% & '* + / =? ^ _ `{|} ~ -] + @ [a- zA-Z0-9 -] + (?: \. [a-zA-Z0-9 -] +) + $
mmmmmm

7
mmmmmmmm john.doe@localhostවලංගු වේ. ඇත්ත වශයෙන්ම, සැබෑ ලෝක යෙදුමක (එනම් ප්‍රජාවක්), * විසින් + වෙනුවට ආදේශ කිරීමට මම යෝජනා කරමි
රබුඩ්

3
@valentinas ඇත්ත වශයෙන්ම, RFC විසින් මෙම දේශීය කොටස් වලක්වා නැත , නමුත් ඒවා උපුටා දැක්විය යුතුය. "test...."@gmail.comRFC අනුව පරිපූර්ණ ලෙස වලංගු වන අතර අර්ථාන්විතව සමාන වේ test....@gmail.com.
රින්කේ

@ හෝ .. with සමඟ ලිපිනයකට යැවීමට උත්සාහ කළහොත් මගේ සමාගමේ රිලේ හරහා පයිතන් භාවිතයෙන් විද්‍යුත් තැපෑලක් යැවීමට උත්සාහ කරන අතරතුර මට දෝෂයක් ඇතිවිය. ඇත්ත වශයෙන්ම එය _ @ හි තත්වයයි. ලබන්නා එය කරනු ඇතැයි විශ්වාස කරනවාට වඩා යැවීමට පෙර ඒවා ඉවත් කරමි.
ndvo

201

පර්ල් 5.10 හෝ ඊට වඩා පහසුය:

/(?(DEFINE)
   (?<address>         (?&mailbox) | (?&group))
   (?<mailbox>         (?&name_addr) | (?&addr_spec))
   (?<name_addr>       (?&display_name)? (?&angle_addr))
   (?<angle_addr>      (?&CFWS)? < (?&addr_spec) > (?&CFWS)?)
   (?<group>           (?&display_name) : (?:(?&mailbox_list) | (?&CFWS))? ;
                                          (?&CFWS)?)
   (?<display_name>    (?&phrase))
   (?<mailbox_list>    (?&mailbox) (?: , (?&mailbox))*)

   (?<addr_spec>       (?&local_part) \@ (?&domain))
   (?<local_part>      (?&dot_atom) | (?&quoted_string))
   (?<domain>          (?&dot_atom) | (?&domain_literal))
   (?<domain_literal>  (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)?
                                 \] (?&CFWS)?)
   (?<dcontent>        (?&dtext) | (?&quoted_pair))
   (?<dtext>           (?&NO_WS_CTL) | [\x21-\x5a\x5e-\x7e])

   (?<atext>           (?&ALPHA) | (?&DIGIT) | [!#\$%&'*+-/=?^_`{|}~])
   (?<atom>            (?&CFWS)? (?&atext)+ (?&CFWS)?)
   (?<dot_atom>        (?&CFWS)? (?&dot_atom_text) (?&CFWS)?)
   (?<dot_atom_text>   (?&atext)+ (?: \. (?&atext)+)*)

   (?<text>            [\x01-\x09\x0b\x0c\x0e-\x7f])
   (?<quoted_pair>     \\ (?&text))

   (?<qtext>           (?&NO_WS_CTL) | [\x21\x23-\x5b\x5d-\x7e])
   (?<qcontent>        (?&qtext) | (?&quoted_pair))
   (?<quoted_string>   (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))*
                        (?&FWS)? (?&DQUOTE) (?&CFWS)?)

   (?<word>            (?&atom) | (?&quoted_string))
   (?<phrase>          (?&word)+)

   # Folding white space
   (?<FWS>             (?: (?&WSP)* (?&CRLF))? (?&WSP)+)
   (?<ctext>           (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e])
   (?<ccontent>        (?&ctext) | (?&quoted_pair) | (?&comment))
   (?<comment>         \( (?: (?&FWS)? (?&ccontent))* (?&FWS)? \) )
   (?<CFWS>            (?: (?&FWS)? (?&comment))*
                       (?: (?:(?&FWS)? (?&comment)) | (?&FWS)))

   # No whitespace control
   (?<NO_WS_CTL>       [\x01-\x08\x0b\x0c\x0e-\x1f\x7f])

   (?<ALPHA>           [A-Za-z])
   (?<DIGIT>           [0-9])
   (?<CRLF>            \x0d \x0a)
   (?<DQUOTE>          ")
   (?<WSP>             [\x20\x09])
 )

 (?&address)/x

20
මෙය පයිතන් හි දැකීමට කැමතිද
tdc

4
addrspecප්‍රශ්නයට සැබවින්ම අදාළ වන්නේ කොටසේ උප කුලකයක් පමණක් යැයි මම සිතමි . ඊට වඩා වැඩි ප්‍රමාණයක් භාරගෙන එය ඉදිරියට යැවීම සම්පූර්ණ RFC5822 ලිපින පිළිගැනීමට සූදානම් නැති පද්ධතියේ වෙනත් කොටසක් වෙඩි තැබීම ඔබේම පාදයක් වැනි ය.
ඩොල්මන්

3
නියමයි (+1) නමුත් තාක්‍ෂණිකව එය ප්‍රතිමූර්තියක් නොවේ ... (ව්‍යාකරණ නිත්‍ය නොවන බැවින් එය කළ නොහැකි වනු ඇත).
රින්කේ

10
regexes ටික කලකට පෙර නිතිපතා වීම නතර විය. එය වලංගු පර්ල් 'රීජෙක්ස්' එකක් වුවද!
rjh

4
IDEone: ideone.com/2XFecH හි මෙම රීජෙක්ස් සඳහා මම පරීක්ෂණයක් ආරම්භ කළෙමි. කෙසේ වෙතත්, එය “පරිපූර්ණව” සාධාරණ නොවේ. කවුරුහරි කතා කරන්න කැමතිද? මට යමක් මග හැරී තිබේද?
මයික්

159

මම පාවිච්චි කරනවා

^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

RegularExpressionValidator විසින් ASP.NET හි භාවිතා කරන එක මෙයයි.


28
බූ! මගේ (වැරදි උපදෙස්) ලිපිනය !@mydomain.netප්‍රතික්ෂේප කරනු ලැබේ.
ෆ්‍රොග්ස්

3
මෙම පිටුවට අනුව data.iana.org/TLD/tlds-alpha-by-domain.txt ඉහළ මට්ටමේ තනි අක්ෂරයක් සහිත වසම් නොමැත. උදා: "something.c", "something.a", මෙහි අනුවාදය අවම වශයෙන් අක්ෂර 2 ක් වත් සහාය දෙන්න: "something.pl", "something.us":^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w{2,}([-.]\\w+)*$
ටොමාස් සුල්ක්

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

Answer TomaszSzulc ඔබගේ පිළිතුරෙහි පසුපසට කප්පාදුව අවුල් සහගතය, මම එය නිවැරදි කළ අතර අක්ෂර වසම් 2 ක නම් සහය ක්‍රියාත්මක වේ, ^ \ w + ([- +. '] \ W +) * @ \ w + ([-.] \ W +) * \. \ w {2,} ([-.] \ w +) * $
අකිබ් මුම්ටාස්

3
මෙය simon-@hotmail.comසත්‍ය වශයෙන්ම වලංගු වන අතර (අපගේ ගනුදෙනුකරුවකුට සමාන ලිපිනයක් තිබුණි) `
සයිමන්_වීවර්

142

හොඳම ගැන දන්නේ නැහැ, නමුත් මේ එක දිගු ලිපින, ඔවුන්ගේ අදහස් ගලවා whitespace වෙනුවට ඇති තරම්, නිවැරදි අවම වශයෙන් වේ.

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


2
මා දන්නා පරිදි සමහර පුස්තකාල ද වැරදිය. PHP PEAR හි එවැනි දෝෂයක් ඇති බව මට නොපැහැදිලි මතකයි.
bortzmeyer

එම පිටුවේ පිරිවිතරයෙන් කරුණු කිහිපයක් පිළිබඳව පතුලේ වියාචනය ද ඇත. regexp සහාය නොදක්වන බව.
ක්‍රිස් වෙස්ට්

7
එය RFC 822 පිරිවිතරයක් මිස RFC 5322 පිරිවිතරයක් නොවේ.
tchrist

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

109

මට වලංගු කිරීමට අවශ්‍ය ඊමේල් ලිපින ASP.NET වෙබ් යෙදුමක් මඟින් System.Net.Mail නාම අවකාශය භාවිතා කරමින් පුද්ගලයින් ලැයිස්තුවකට විද්‍යුත් තැපැල් යැවීමට භාවිතා කරනු ඇත. එබැවින්, ඉතා සංකීර්ණ නිත්‍ය ප්‍රකාශනයක් භාවිතා කරනවා වෙනුවට, මම ලිපිනයෙන් තැපැල් ලිපිනයක් නිර්මාණය කිරීමට උත්සාහ කරමි. ලිපිනය නිසියාකාරව සකසා නොමැති නම් MailAddress construtor විසින් ව්‍යතිරේකයක් දමනු ඇත. මේ ආකාරයෙන්, මම දන්නවා මට අවම වශයෙන් විද්‍යුත් තැපෑල දොරෙන් එළියට ගත හැකි බව. ඇත්ත වශයෙන්ම මෙය සේවාදායක පාර්ශවීය වලංගුකරණයකි, නමුත් අවම වශයෙන් ඔබට එය කෙසේ හෝ අවශ්‍ය වේ.

protected void emailValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
    try
    {
        var a = new MailAddress(txtEmail.Text);
    }
    catch (Exception ex)
    {
        args.IsValid = false;
        emailValidator.ErrorMessage = "email: " + ex.Message;
    }
}

3
හොඳ කරුණක්. මෙම සේවාදායක වලංගු කිරීම කිසියම් වලංගු ලිපිනයක් ප්‍රතික්ෂේප කළද එය ගැටළුවක් නොවන බැවින් ඔබට මෙම සේවාදායක සේවාදායක තාක්ෂණය භාවිතා කර මෙම ලිපිනයට යැවිය නොහැක. නැතහොත් සුපුරුදු මෙවලම් වෙනුවට ඔබ භාවිතා කරන ඕනෑම තෙවන පාර්ශවීය ඊමේල් පුස්තකාලයක් භාවිතා කර එකම දේ කිරීමට උත්සාහ කළ හැකිය.
පරිශීලක

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

... ඔව් සහ එය වලංගු වන්නේ කෙසේද යන්න ගැන උනන්දුවක් දක්වන අයට පරාවර්තකයේ කේතය දෙස බලන්න - එහි තරමක් තිබේ - එය සාමාන්‍ය ප්‍රකාශනයක් නොවේ!
ටොම් කාටර්

2
සටහනක් පමණි: ඔබට එය වලංගු කිරීම සඳහා භාවිතා කිරීමට අවශ්‍ය නම්, MailAddress පන්තිය RFC5322 සමඟ නොගැලපේ (සහ එවීමද නොවේ, ඉහත සඳහන් කළ පරිදි එය වැදගත් කරුණකි). බලන්න: stackoverflow.com/questions/6023589/…
porges

සුළු ප්‍රශ්නයක් පමණි: ඔබේ සේවාදායක පාර්ශවීය වලංගු කේතය නැවත භාවිතා කළ හැකි කිරීමට ඔබට අවශ්‍ය නම් (මේ අවස්ථාවේ දී හෝ පොදුවේ), දෘ-කේත args.Valueවැනි ක්ෂේත්‍රය යොමු කිරීම වෙනුවට භාවිතා කිරීමට මම යෝජනා කරමි txtEmail.Text. දෙවැන්න ඔබගේ වලංගු කරන්නා තනි පාලන අවස්ථාවකට බැඳ තබයි, එය ඔබට තනි විද්‍යුත් තැපැල් ක්ෂේත්‍රයක් ඇති තාක් කල් එය හරි විය හැකිය, නමුත් වෙනත් ආකාරයකින් නිර්දේශ නොකරයි.
ෆොල්පාර්

109

ඉක්මන් පිළිතුර

ආදාන වලංගු කිරීම සඳහා පහත සඳහන් රීජෙක්ස් භාවිතා කරන්න:

([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?(\.[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?)+

මෙම රීජෙක්ස් සමඟ ගැලපෙන ලිපිනයන්:

  • RFC 5321/5322 සමඟ තදින් අනුකූල වන දේශීය කොටසක් (එනම් s -සයින්ට පෙර කොටස) තිබිය යුතුය,
  • අවම වශයෙන් ලේබල් දෙකක් සහිත ධාරක නාමයක් වන ඩොමේන් කොටසක් (එනම් s -සයින් පසු කොටස) ඇති අතර, ඒ සෑම එකක්ම උපරිම වශයෙන් අක්ෂර 63 ක් වේ.

දෙවන බාධකය RFC 5321/5322 සඳහා සීමාවකි.

විස්තීර්ණ පිළිතුර

ඊමේල් ලිපින හඳුනාගන්නා නිත්‍ය ප්‍රකාශනයක් භාවිතා කිරීම විවිධ අවස්ථාවන්හිදී ප්‍රයෝජනවත් විය හැකිය: නිදසුනක් ලෙස ලේඛනයක ඊමේල් ලිපින පරිලෝකනය කිරීම, පරිශීලක ආදානය වලංගු කිරීම හෝ දත්ත ගබඩාවක අඛණ්ඩතාව බාධකයක් ලෙස.

කෙසේ වෙතත්, ලිපිනය ඇත්ත වශයෙන්ම පවතින තැපැල් පෙට්ටියකට යොමු වන්නේ දැයි සොයා ගැනීමට ඔබට අවශ්‍ය නම්, ලිපිනයට පණිවිඩයක් යැවීම සඳහා ආදේශකයක් නොමැති බව සැලකිල්ලට ගත යුතුය. ඔබට ලිපිනයක් ව්‍යාකරණමය වශයෙන් නිවැරදි දැයි පරීක්ෂා කිරීමට අවශ්‍ය නම් ඔබට සාමාන්‍ය ප්‍රකාශනයක් භාවිතා කළ හැකිය, නමුත් ""@[]එය ව්‍යාකරණමය වශයෙන් නිවැරදි ඊමේල් ලිපිනයක් වන අතර එය දැනට පවතින තැපැල් පෙට්ටියකට යොමු නොවේ.

ඊමේල් ලිපිනවල වාක්‍ය ඛණ්ඩය විවිධ RFC වල අර්ථ දක්වා ඇත , විශේෂයෙන් RFC 822 සහ RFC 5322 . RFC 822 "මුල්" ප්‍රමිතිය ලෙසත් RFC 5322 නවතම ප්‍රමිතිය ලෙසත් දැකිය යුතුය. ආර්.එෆ්.සී.

මෙම පිළිතුරෙන් මම addr-specRFC වල අර්ථ දක්වා ඇති පරිදි “ඊමේල් ලිපිනය” ගන්නෙමි (එනම් jdoe@example.org, නමුත් නැත "John Doe"<jdoe@example.org>, නැත some-group:jdoe@example.org,mrx@exampel.org;).

RFC සින්ටැක්ස් රීජෙක්ස් බවට පරිවර්තනය කිරීමේදී එක් ගැටළුවක් ඇත: සින්ටැක්ස් නිත්‍ය නොවේ! මෙයට හේතුව ඔවුන් අනන්තවත් කැදැල්ල කළ හැකි ඊමේල් ලිපිනවල විකල්ප අදහස් දැක්වීමට ඉඩ දෙන අතර අනන්ත කැදැල්ල නිත්‍ය ප්‍රකාශනයකින් විස්තර කළ නොහැකි බැවිනි. අදහස් අඩංගු ලිපින පරිලෝකනය කිරීමට හෝ වලංගු කිරීමට ඔබට විග්‍රහයක් හෝ වඩා ප්‍රබල ප්‍රකාශන අවශ්‍ය වේ. (පර්ල් වැනි භාෂාවන්ට සන්දර්භය රහිත ව්‍යාකරණ රීජෙක්ස් ආකාරයෙන් විස්තර කිරීමට ව්‍යුහයන් ඇති බව සලකන්න.) මෙම පිළිතුරේ දී මම අදහස් නොසලකා හරිනු ලබන අතර නිසි නිත්‍ය ප්‍රකාශන පමණක් සලකා බලමි.

RFCs ඊමේල් පණිවිඩ සඳහා සින්ටැක්ස් අර්ථ දක්වයි, ඊමේල් ලිපින සඳහා නොවේ. ලිපින විවිධ ශීර්ෂ ක්ෂේත්‍රයන්හි දිස්විය හැකි අතර ඒවා මූලික වශයෙන් අර්ථ දක්වා ඇත්තේ මෙහිදීය. ඒවා ශීර්ෂ ක්ෂේත්‍රයන්හි දිස්වන විට ලිපිනවල (ශබ්දකෝෂ ටෝකන අතර) සුදු අවකාශය, අදහස් සහ රේඛා කඩනයන් පවා අඩංගු විය හැකිය. කෙසේ වෙතත් අර්ථයෙන් මෙය කිසිදු වැදගත්කමක් නැත. ලිපිනයකින් මෙම සුදු අවකාශය ඉවත් කිරීමෙන් ඔබට අර්ථාන්විතව සමාන කැනොනිකල් නිරූපණයක් ලැබේ. මේ අනුව, කැනොනිකල් නිරූපණය first. last (comment) @ [3.5.7.9]වේ first.last@[3.5.7.9].

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

ASCII අනුකූල අක්ෂර කට්ටලයක් උපකල්පනය කරමින් මම මෙම පිළිතුරෙහි POSIX “දීර් extended” නිත්‍ය ප්‍රකාශන භාවිතා කරමි.

RFC 822

මම පහත දැක්වෙන නිත්‍ය ප්‍රකාශනයට පැමිණියෙමි. එය බිඳ දැමීමට උත්සාහ කරන ලෙස මම සෑම දෙනාටම ආරාධනා කරමි. ඔබ කිසියම් ව්‍යාජ ධනාත්මක හෝ ව්‍යාජ නිෂේධනීය දේ සොයා ගන්නේ නම්, කරුණාකර ඒවා අදහස් දැක්වීමක පළ කරන්න.

([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]))*(\\\r)*")(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]))*(\\\r)*"))*@([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]))*(\\\r)*])(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]))*(\\\r)*]))*

මම එය සම්පූර්ණයෙන් RFC 822 ඇතුළු සමග complient විශ්වාස කරනවා දෝශහරණයක් . එය හඳුනාගන්නේ ඊමේල් ලිපින ඔවුන්ගේ කැනොනිකල් ස්වරූපයෙන් පමණි. සුදු පැහැති අවකාශය හඳුනාගන්නා රීජෙක්ස් සඳහා පහත ව්‍යුත්පන්නය බලන්න.

ව්‍යුත්පන්නයෙන් දැක්වෙන්නේ මා ප්‍රකාශනයට පැමිණි ආකාරයයි. RFC වෙතින් අදාළ සියලුම ව්‍යාකරණ රීති මම පෙනෙන ආකාරයටම ලැයිස්තුගත කර, ඊට අනුරූප රීජෙක්ස් අනුගමනය කරමි. දෝෂයක් ප්‍රකාශයට පත් කර ඇති තැන මම නිවැරදි කරන ලද ව්‍යාකරණ රීතිය සඳහා වෙනම ප්‍රකාශනයක් ලබා දෙමි ("දෝෂය" ලෙස සලකුණු කර ඇත) සහ යාවත්කාලීන කරන ලද අනුවාදය පසුකාලීන නිත්‍ය ප්‍රකාශනවල උප ප්‍රකාශනයක් ලෙස භාවිතා කරමි.

3.1.4 ඡේදයේ සඳහන් පරිදි. RFC 822 හි විකල්ප රේඛීය සුදු අවකාශය ශබ්දකෝෂ ටෝකන අතර ඇතුළත් කළ හැකිය. අදාළ වන විට මම මෙම රීතියට අනුකූල වන පරිදි ප්‍රකාශන පුළුල් කර ප්‍රති result ලය "opt-lwsp" ලෙස සලකුණු කර ඇත්තෙමි.

CHAR        =  <any ASCII character>
            =~ .

CTL         =  <any ASCII control character and DEL>
            =~ [\x00-\x1F\x7F]

CR          =  <ASCII CR, carriage return>
            =~ \r

LF          =  <ASCII LF, linefeed>
            =~ \n

SPACE       =  <ASCII SP, space>
            =~  

HTAB        =  <ASCII HT, horizontal-tab>
            =~ \t

<">         =  <ASCII quote mark>
            =~ "

CRLF        =  CR LF
            =~ \r\n

LWSP-char   =  SPACE / HTAB
            =~ [ \t]

linear-white-space =  1*([CRLF] LWSP-char)
                   =~ ((\r\n)?[ \t])+

specials    =  "(" / ")" / "<" / ">" / "@" /  "," / ";" / ":" / "\" / <"> /  "." / "[" / "]"
            =~ [][()<>@,;:\\".]

quoted-pair =  "\" CHAR
            =~ \\.

qtext       =  <any CHAR excepting <">, "\" & CR, and including linear-white-space>
            =~ [^"\\\r]|((\r\n)?[ \t])+

dtext       =  <any CHAR excluding "[", "]", "\" & CR, & including linear-white-space>
            =~ [^][\\\r]|((\r\n)?[ \t])+

quoted-string  =  <"> *(qtext|quoted-pair) <">
               =~ "([^"\\\r]|((\r\n)?[ \t])|\\.)*"
(erratum)      =~ "(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*"

domain-literal =  "[" *(dtext|quoted-pair) "]"
               =~ \[([^][\\\r]|((\r\n)?[ \t])|\\.)*]
(erratum)      =~ \[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*]

atom        =  1*<any CHAR except specials, SPACE and CTLs>
            =~ [^][()<>@,;:\\". \x00-\x1F\x7F]+

word        =  atom / quoted-string
            =~ [^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*"

domain-ref  =  atom

sub-domain  =  domain-ref / domain-literal
            =~ [^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*]

local-part  =  word *("." word)
            =~ ([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*")(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*"))*
(opt-lwsp)  =~ ([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*")(((\r\n)?[ \t])*\.((\r\n)?[ \t])*([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*"))*

domain      =  sub-domain *("." sub-domain)
            =~ ([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*])(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*]))*
(opt-lwsp)  =~ ([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*])(((\r\n)?[ \t])*\.((\r\n)?[ \t])*([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*]))*

addr-spec   =  local-part "@" domain
            =~ ([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*")(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*"))*@([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*])(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*]))*
(opt-lwsp)  =~ ([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*")((\r\n)?[ \t])*(\.((\r\n)?[ \t])*([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*")((\r\n)?[ \t])*)*@((\r\n)?[ \t])*([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*])(((\r\n)?[ \t])*\.((\r\n)?[ \t])*([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]|(\r\n)?[ \t]))*(\\\r)*]))*
(canonical) =~ ([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]))*(\\\r)*")(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|"(\n|(\\\r)*([^"\\\r\n]|\\[^\r]))*(\\\r)*"))*@([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]))*(\\\r)*])(\.([^][()<>@,;:\\". \x00-\x1F\x7F]+|\[(\n|(\\\r)*([^][\\\r\n]|\\[^\r]))*(\\\r)*]))*

RFC 5322

මම පහත දැක්වෙන නිත්‍ය ප්‍රකාශනයට පැමිණියෙමි. එය බිඳ දැමීමට උත්සාහ කරන ලෙස මම සෑම දෙනාටම ආරාධනා කරමි. ඔබ කිසියම් ව්‍යාජ ධනාත්මක හෝ ව්‍යාජ නිෂේධනීය දේ සොයා ගන්නේ නම්, කරුණාකර ඒවා අදහස් දැක්වීමක පළ කරන්න.

([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|\[[\t -Z^-~]*])

මම එය සම්පූර්ණයෙන් RFC 5322 ඇතුලු සමග complient විශ්වාස කරනවා දෝශහරණයක් . එය හඳුනාගන්නේ ඊමේල් ලිපින ඔවුන්ගේ කැනොනිකල් ස්වරූපයෙන් පමණි. සුදු පැහැති අවකාශය හඳුනාගන්නා රීජෙක්ස් සඳහා පහත ව්‍යුත්පන්නය බලන්න.

ව්‍යුත්පන්නයෙන් දැක්වෙන්නේ මා ප්‍රකාශනයට පැමිණි ආකාරයයි. RFC වෙතින් අදාළ සියලුම ව්‍යාකරණ රීති මම පෙනෙන ආකාරයටම ලැයිස්තුගත කර, ඊට අනුරූප රීජෙක්ස් අනුගමනය කරමි. අර්ථ නිරූපණයට අදාළ නොවන (නැමීමේ) සුදු අවකාශය ඇතුළත් වන නීති සඳහා, මම මෙම සුදු අවකාශය නොපිළිගන්නා "(සාමාන්‍යකරණය කරන ලද)" ලෙස සලකුණු කරන ලද වෙනම රීජෙක්ස් එකක් ලබා දෙමි.

මම RFC වෙතින් සියලුම "නිරීක්ෂණ" නීති නොසලකා හැරියෙමි. මෙයින් අදහස් කරන්නේ රීජෙක්ස් RFC 5322 ට අනුකූල වන ඊමේල් ලිපින වලට පමණක් ගැලපෙන බවයි. ඔබට "පැරණි" ලිපින සමඟ සැසඳිය යුතු නම් ("අබ්ස්" රීති ඇතුළුව ලිහිල් ව්‍යාකරණ මෙන්), ඔබට පෙර ඡේදයෙන් RFC 822 රීජෙක්ස් එකක් භාවිතා කළ හැකිය.

VCHAR           =   %x21-7E
                =~  [!-~]

ALPHA           =   %x41-5A / %x61-7A
                =~  [A-Za-z]

DIGIT           =   %x30-39
                =~  [0-9]

HTAB            =   %x09
                =~  \t

CR              =   %x0D
                =~  \r

LF              =   %x0A
                =~  \n

SP              =   %x20
                =~  

DQUOTE          =   %x22
                =~  "

CRLF            =   CR LF
                =~  \r\n

WSP             =   SP / HTAB
                =~  [\t ]

quoted-pair     =   "\" (VCHAR / WSP)
                =~  \\[\t -~]

FWS             =   ([*WSP CRLF] 1*WSP)
                =~  ([\t ]*\r\n)?[\t ]+

ctext           =   %d33-39 / %d42-91 / %d93-126
                =~  []!-'*-[^-~]

("comment" is left out in the regex)
ccontent        =   ctext / quoted-pair / comment
                =~  []!-'*-[^-~]|(\\[\t -~])

(not regular)
comment         =   "(" *([FWS] ccontent) [FWS] ")"

(is equivalent to FWS when leaving out comments)
CFWS            =   (1*([FWS] comment) [FWS]) / FWS
                =~  ([\t ]*\r\n)?[\t ]+

atext           =   ALPHA / DIGIT / "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "/" / "=" / "?" / "^" / "_" / "`" / "{" / "|" / "}" / "~"
                =~  [-!#-'*+/-9=?A-Z^-~]

dot-atom-text   =   1*atext *("." 1*atext)
                =~  [-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*

dot-atom        =   [CFWS] dot-atom-text [CFWS]
                =~  (([\t ]*\r\n)?[\t ]+)?[-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*(([\t ]*\r\n)?[\t ]+)?
(normalized)    =~  [-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*

qtext           =   %d33 / %d35-91 / %d93-126
                =~  []!#-[^-~]

qcontent        =   qtext / quoted-pair
                =~  []!#-[^-~]|(\\[\t -~])

(erratum)
quoted-string   =   [CFWS] DQUOTE ((1*([FWS] qcontent) [FWS]) / FWS) DQUOTE [CFWS]
                =~  (([\t ]*\r\n)?[\t ]+)?"(((([\t ]*\r\n)?[\t ]+)?([]!#-[^-~]|(\\[\t -~])))+(([\t ]*\r\n)?[\t ]+)?|(([\t ]*\r\n)?[\t ]+)?)"(([\t ]*\r\n)?[\t ]+)?
(normalized)    =~  "([]!#-[^-~ \t]|(\\[\t -~]))+"

dtext           =   %d33-90 / %d94-126
                =~  [!-Z^-~]

domain-literal  =   [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]
                =~  (([\t ]*\r\n)?[\t ]+)?\[((([\t ]*\r\n)?[\t ]+)?[!-Z^-~])*(([\t ]*\r\n)?[\t ]+)?](([\t ]*\r\n)?[\t ]+)?
(normalized)    =~  \[[\t -Z^-~]*]

local-part      =   dot-atom / quoted-string
                =~  (([\t ]*\r\n)?[\t ]+)?[-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*(([\t ]*\r\n)?[\t ]+)?|(([\t ]*\r\n)?[\t ]+)?"(((([\t ]*\r\n)?[\t ]+)?([]!#-[^-~]|(\\[\t -~])))+(([\t ]*\r\n)?[\t ]+)?|(([\t ]*\r\n)?[\t ]+)?)"(([\t ]*\r\n)?[\t ]+)?
(normalized)    =~  [-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+"

domain          =   dot-atom / domain-literal
                =~  (([\t ]*\r\n)?[\t ]+)?[-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*(([\t ]*\r\n)?[\t ]+)?|(([\t ]*\r\n)?[\t ]+)?\[((([\t ]*\r\n)?[\t ]+)?[!-Z^-~])*(([\t ]*\r\n)?[\t ]+)?](([\t ]*\r\n)?[\t ]+)?
(normalized)    =~  [-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|\[[\t -Z^-~]*]

addr-spec       =   local-part "@" domain
                =~  ((([\t ]*\r\n)?[\t ]+)?[-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*(([\t ]*\r\n)?[\t ]+)?|(([\t ]*\r\n)?[\t ]+)?"(((([\t ]*\r\n)?[\t ]+)?([]!#-[^-~]|(\\[\t -~])))+(([\t ]*\r\n)?[\t ]+)?|(([\t ]*\r\n)?[\t ]+)?)"(([\t ]*\r\n)?[\t ]+)?)@((([\t ]*\r\n)?[\t ]+)?[-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*(([\t ]*\r\n)?[\t ]+)?|(([\t ]*\r\n)?[\t ]+)?\[((([\t ]*\r\n)?[\t ]+)?[!-Z^-~])*(([\t ]*\r\n)?[\t ]+)?](([\t ]*\r\n)?[\t ]+)?)
(normalized)    =~  ([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|\[[\t -Z^-~]*])

සමහර මූලාශ්‍ර (විශේෂයෙන් w3c ) RFC 5322 දේශීය කොටසෙහි දැඩි බව ප්‍රකාශ කරන බව සලකන්න (එනම් s -සයින්ට පෙර කොටස). මෙයට හේතුව "..", "අ..බී" සහ "අ." ය නොවේ ඔවුන් තැපැල් පෙට්ටිය නම් ලෙස භාවිතා කළ හැකි අතර, වලංගු dot-පරමාණු. මෙම නේවාසික විදේශ ව්යවහාර මුදල්, කෙසේ වෙතත්, කරන්නේ , මේ වගේ දේශීය කොටස් සඳහා ඉඩ ඔවුන් උපුටා කළ යුතු බව හැර. එබැවින් ඔබ වෙනුවට a..b@example.netලිවිය යුතුය"a..b"@example.net , එය අර්ථාන්විතව සමාන වේ.

තවදුරටත් සීමාවන්

SMTP ( RFC 5321 හි අර්ථ දක්වා ඇති පරිදි ) වලංගු ඊමේල් ලිපින සමූහය තවදුරටත් සීමා කරයි (හෝ ඇත්ත වශයෙන්ම: තැපැල් පෙට්ටියේ නම්). ගැලපෙන ඊමේල් ලිපිනය ඇත්ත වශයෙන්ම විද්‍යුත් තැපෑලක් යැවීමට භාවිතා කළ හැකි වන පරිදි මෙම දැඩි ව්‍යාකරණ පැනවීම සාධාරණ බව පෙනේ.

RFC 5321 මූලික වශයෙන් "දේශීය" කොටස (එනම් @ -සයින්ට පෙර කොටස) පමණක් ඉතිරි කරයි, නමුත් ඩොමේන් කොටසෙහි (එනම් s -සයින් පසු කොටස) දැඩි වේ. එය ඉඩ දෙන්නේ ඩොට්-පරමාණු වෙනුවට ධාරක නාම සහ ඩොමේන් සාහිත්‍යකරුවන් වෙනුවට ලිපින වචනාර්ථ පමණි.

RFC 5321 හි ඉදිරිපත් කර ඇති ව්‍යාකරණ ධාරක නාම සහ IP ලිපින යන දෙකටම වඩා සැහැල්ලු ය. මෙම කෙටුම්පත සහ RFC 1034 මාර්ගෝපදේශ ලෙස භාවිතා කරමින්, නීති රීති "නිවැරදි කිරීමේ" නිදහස මම ලබා ගතිමි . මෙහි ප්‍රති ing ලයක් ලෙස රීජෙක්ස් වේ.

([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@([0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?(\.[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?)*|\[((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|IPv6:((((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){6}|::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){5}|[0-9A-Fa-f]{0,4}::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){4}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):)?(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){3}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,2}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){2}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,3}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,4}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,5}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,6}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)|(?!IPv6:)[0-9A-Za-z-]*[0-9A-Za-z]:[!-Z^-~]+)])

භාවිත අවස්ථාව මත පදනම්ව ඔබේ රීජෙක්ස් හි “සාමාන්‍ය ලිපින-වචනාර්ථය” සඳහා ඉඩ දීමට ඔබට අවශ්‍ය නොවනු ඇති බව සලකන්න. මම negative ණාත්මක පෙනුමක් භාවිතා කළ බව සලකන්න(?!IPv6:)විකෘති වූ IPv6 ලිපින සමඟ සැසඳීම සඳහා "සාමාන්‍ය-ලිපින-වචනානුසාරී" කොටස වැළැක්වීම සඳහා අවසාන හි . සමහර රීජෙක්ස් ප්‍රොසෙසර negative ණාත්මක පෙනුමට සහාය නොදක්වයි. |(?!IPv6:)[0-9A-Za-z-]*[0-9A-Za-z]:[!-Z^-~]+ඔබට සම්පූර්ණ "සාමාන්‍ය-ලිපින-වචනානුසාරී" කොටස ඉවතට ගැනීමට අවශ්‍ය නම් , උපස්ථරය රීජෙක්ස් වෙතින් ඉවත් කරන්න .

මෙන්න ව්‍යුත්පන්නය:

Let-dig         =   ALPHA / DIGIT
                =~  [0-9A-Za-z]

Ldh-str         =   *( ALPHA / DIGIT / "-" ) Let-dig
                =~  [0-9A-Za-z-]*[0-9A-Za-z]

(regex is updated to make sure sub-domains are max. 63 charactes long - RFC 1034 section 3.5)
sub-domain      =   Let-dig [Ldh-str]
                =~  [0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?

Domain          =   sub-domain *("." sub-domain)
                =~  [0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?(\.[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?)*

Snum            =   1*3DIGIT
                =~  [0-9]{1,3}

(suggested replacement for "Snum")
ip4-octet       =   DIGIT / %x31-39 DIGIT / "1" 2DIGIT / "2" %x30-34 DIGIT / "25" %x30-35
                =~  25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9]

IPv4-address-literal    =   Snum 3("."  Snum)
                        =~  [0-9]{1,3}(\.[0-9]{1,3}){3}

(suggested replacement for "IPv4-address-literal")
ip4-address     =   ip4-octet 3("." ip4-octet)
                =~  (25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}

(suggested replacement for "IPv6-hex")
ip6-h16         =   "0" / ( (%x49-57 / %x65-70 /%x97-102) 0*3(%x48-57 / %x65-70 /%x97-102) )
                =~  0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}

(not from RFC)
ls32            =   ip6-h16 ":" ip6-h16 / ip4-address
                =~  (0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}

(suggested replacement of "IPv6-addr")
ip6-address     =                                      6(ip6-h16 ":") ls32
                    /                             "::" 5(ip6-h16 ":") ls32
                    / [                 ip6-h16 ] "::" 4(ip6-h16 ":") ls32
                    / [ *1(ip6-h16 ":") ip6-h16 ] "::" 3(ip6-h16 ":") ls32
                    / [ *2(ip6-h16 ":") ip6-h16 ] "::" 2(ip6-h16 ":") ls32
                    / [ *3(ip6-h16 ":") ip6-h16 ] "::"   ip6-h16 ":"  ls32
                    / [ *4(ip6-h16 ":") ip6-h16 ] "::"                ls32
                    / [ *5(ip6-h16 ":") ip6-h16 ] "::"   ip6-h16
                    / [ *6(ip6-h16 ":") ip6-h16 ] "::"
                =~  (((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){6}|::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){5}|[0-9A-Fa-f]{0,4}::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){4}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):)?(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){3}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,2}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){2}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,3}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,4}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,5}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,6}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::

IPv6-address-literal    =   "IPv6:" ip6-address
                        =~  IPv6:((((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){6}|::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){5}|[0-9A-Fa-f]{0,4}::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){4}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):)?(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){3}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,2}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){2}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,3}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,4}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,5}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,6}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)

Standardized-tag        =   Ldh-str
                        =~  [0-9A-Za-z-]*[0-9A-Za-z]

dcontent        =   %d33-90 / %d94-126
                =~  [!-Z^-~]

General-address-literal =   Standardized-tag ":" 1*dcontent
                        =~  [0-9A-Za-z-]*[0-9A-Za-z]:[!-Z^-~]+

address-literal =   "[" ( IPv4-address-literal / IPv6-address-literal / General-address-literal ) "]"
                =~  \[((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|IPv6:((((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){6}|::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){5}|[0-9A-Fa-f]{0,4}::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){4}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):)?(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){3}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,2}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){2}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,3}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,4}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,5}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,6}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)|(?!IPv6:)[0-9A-Za-z-]*[0-9A-Za-z]:[!-Z^-~]+)]

Mailbox         =   Local-part "@" ( Domain / address-literal )
                =~  ([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@([0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?(\.[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?)*|\[((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|IPv6:((((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){6}|::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){5}|[0-9A-Fa-f]{0,4}::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){4}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):)?(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){3}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,2}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){2}|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,3}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,4}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,5}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,6}(0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}))?::)|(?!IPv6:)[0-9A-Za-z-]*[0-9A-Za-z]:[!-Z^-~]+)])

පරිශීලක ආදාන වලංගුකරණය

පොදු භාවිත අවස්ථාවක් වන්නේ පරිශීලක ආදාන වලංගුකරණය, උදාහරණයක් ලෙස html පෝරමයක් මත ය. එවැනි අවස්ථාවකදී සාමාන්‍යයෙන් ලිපින-වචනාර්ථයන් වළක්වා ගැනීම සහ ධාරක නාමයේ අවම වශයෙන් ලේබල් දෙකක් වත් අවශ්‍ය වේ. පෙර කොටසේ සිට වැඩිදියුණු කළ RFC 5321 රීජෙක්ස් පදනමක් ලෙස ගත් විට, එහි ප්‍රති expression ලය වනුයේ:

([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?(\.[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?)+

දේශීය කොටස තවදුරටත් සීමා කිරීමට මම නිර්දේශ නොකරමි, උදා: උපුටා ගත් නූල් වළක්වා ගැනීමෙන්, සමහර ධාරකයන් ඉඩ දෙන්නේ කුමන ආකාරයේ තැපැල් පෙට්ටි නම් දැයි අපි නොදනිමු (වැනි "a..b"@example.netහෝ පවා "a b"@example.net).

වචනයේ පරිසමාප්ත අර්ථයෙන්ම ඉහළ මට්ටමේ වසම් ලැයිස්තුවකට එරෙහිව වලංගු කිරීමක් හෝ දිග සීමාවන් පැනවීමට මම නිර්දේශ නොකරමි (".මියුසියම්" අවලංගු වූ ආකාරය මතක තබා ගන්න [a-z]{2,4}), නමුත් ඔබට අවශ්‍ය නම්:

([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@([0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?\.)*(net|org|com|info|etc ...)

පැහැදිලි ඉහළ මට්ටමේ වසම් වලංගු කිරීමේ මාවතකට යාමට ඔබ තීරණය කරන්නේ නම්, ඔබේ රීජෙක්ස් යාවත්කාලීනව තබා ගැනීමට වග බලා ගන්න.

තවදුරටත් සලකා බැලිය යුතුය

ඩොමේන් කොටසේ (@ -සයින් පසු) ධාරක නාම පමණක් පිළිගන්නා විට, ඉහත සඳහන් රිජෙක්ස් පිළිගන්නේ අක්ෂර 63 ක් ඇති ලේබල් පමණි. කෙසේ වෙතත්, සමස්ත සත්කාරක නාමය උපරිම වශයෙන් අක්ෂර 253 ක් විය යුතුය (තිත් ඇතුළුව) යන කාරණය ඔවුන් බලාත්මක නොකරයි. මෙම අවහිරතාවය තවමත් නිතිපතා කථා කළද, මෙම රීතිය ඇතුළත් වන රීජෙක්ස් එකක් සෑදිය නොහැක.

තවත් කරුණක් නම්, විශේෂයෙන් ආදාන වලංගු කිරීම සඳහා රීජෙක්ස් භාවිතා කරන විට, පරිශීලකයාට ලැබෙන ප්‍රතිපෝෂණයයි. පරිශීලකයෙකු වැරදි ලිපිනයකට ඇතුළු වන්නේ නම්, සරල “සින්ටැක්ටිකල් වැරදි ලිපිනයකට” වඩා ටිකක් වැඩි ප්‍රතිපෝෂණයක් ලබා දීම සතුටක්. "වැනිලා" රීජෙක්ස් සමඟ මෙය කළ නොහැක.

ලිපිනය විග්‍රහ කිරීමෙන් මෙම කරුණු දෙක විසඳිය හැකිය. ධාරක නාමයන්හි අමතර දිග සීමාව සමහර අවස්ථාවලදී එය පරීක්ෂා කරන අතිරේක රීජෙක්ස් භාවිතා කිරීමෙන් සහ ප්‍රකාශන දෙකටම ලිපිනය ගැලපීමෙන් විසඳිය හැකිය.

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


3
සම්පූර්ණ පිරිසිදු යූටීඑෆ් -8 ඇතුළත් කිරීමට RFC 6532 යාවත්කාලීන 5322 යාවත්කාලීන කරයි. අමතර විස්තර මෙහි .

විකිපීඩියාවට අනුව, දේශීය කොටස, තිත් කරන විට, කොටසකට අක්ෂර 64 ක සීමාවක් ඇති අතර, RFC 5322 ද සඳහන් කරන්නේ, තිත් සහිත දේශීය කොටස වසම්වල සීමාවන් සමඟ අර්ථ නිරූපණය කළ යුතු බවයි. උදාහරණයක් ලෙස arbitrary-long-email-address-should-be-invalid-arbitrary-long-email-address-should-be-invalid.and-the-second-group-also-should-not-be-so-long-and-the-second-group-also-should-not-be-so-long@example.comවලංගු නොවිය යුතුය. පළමු කණ්ඩායමේ (විකල්ප තිතට පෙර නම) සහ දෙවන කණ්ඩායමේ (පහත දැක්වෙන තිත් වලට පසුව) "+" සං signs ා වෙනස් කිරීමට මම යෝජනා කරමි{1,64}
ෂේවි මොන්ටෙරෝ

අදහස් ප්‍රමාණයෙන් සීමිත බැවින්, මෙහි ප්‍රති result ලයක් ලෙස මම භාවිතා කිරීමට අදහස් කරන රීජෙක්ස්, මෙම පිළිතුර ආරම්භයේ දී ඇති අතර, දේශීය කොටසෙහි ප්‍රමාණය සීමා කිරීම සහ "/" ට පෙර පසු-කප්පාදුවක් එක් කිරීම. සංකේතය PHP ට අවශ්‍ය පරිදි සහ regex101.com හි: PHP හි මම භාවිතා කරන්නේ:$emailRegex = '/^([-!#-\'*+\/-9=?A-Z^-~]{1,64}(\.[-!#-\'*+\/-9=?A-Z^-~]{1,64})*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?(\.[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?)+$/';
මොන්ටෙරෝ

අවවාදයයි: කිසියම් හේතුවක් නිසා, විදැහුම් සලකුණු වලින් පිටපත් කිරීමේදී ස්ටැක් ඕවර්ෆ්ලෝ සැඟවුණු අක්ෂර එක් කරයි. එය regex101.com වෙත පිටපත් කරන්න, එවිට ඔබට එහි කළු තිත් පෙනෙනු ඇත. ඔබ ඒවා ඉවත් කර නූල නිවැරදි කළ යුතුය ... සමහර විට පිළිතුර සමඟ ඒකාබද්ධ වී ඇත්නම් ඒවා නිවැරදිව පිටපත් කළ හැකිය. අපහසුතාවයට කනගාටුයි. මෙය නිවැරදි පිළිතුර බැවින් මට නව පිළිතුරක් එක් කිරීමට අවශ්‍ය නැත. මෙය ඒකාබද්ධ කළ යුතු යැයි ප්‍රජාව සිතන්නේ නම් මිස කෙලින්ම සංස්කරණය කිරීමට මට අවශ්‍ය නැත.
සේවි මොන්ටෙරෝ

Xavi සඳහා දායක වීම සඳහා XaviMontero ස්තූතියි! දේශීය කොටස් ලේබලවල අක්ෂර 64 සීමාව සඳහන් කරමින් ඔබට RFC ගැන සඳහනක් තිබේද? එසේ නම්, මම සතුටින් පිළිතුර සකස් කරමි.
රින්කේ

73

මේ සඳහා අන්තර්ජාලයේ ඕනෑ තරම් උදාහරණ ඇත (තවද මම සිතන්නේ RFC සම්පූර්ණයෙන් වලංගු කරන එකක් පවා - නමුත් මතකය සේවය කරන්නේ නම් එය පේළි දස දහස් ගණනක් දිගයි). මේ ආකාරයේ දෙයක් වලංගු කරමින් මිනිසුන් රැගෙන යාමට නැඹුරු වේ. එය @ සහ අවම වශයෙන් එකක් තිබේදැයි පරීක්ෂා නොකරන්නේ මන්ද? සහ සරල අවම දිගක් සපුරාලයි. ව්‍යාජ විද්‍යුත් තැපෑලක් ඇතුළත් කිරීම ඉතා සුළු කාරණයක් වන අතර ඕනෑම වලංගු රීජෙක්ස් එකක් කෙසේ හෝ ගැලපේ. ව්‍යාජ නිෂේධනවලට වඩා ව්‍යාජ ධනාත්මක බව මම අනුමාන කරමි.


1
ඔව්, නමුත් කුමන RFC? :) මෙම [RFC - 5322 - validator] ( stackoverflow.com/questions/201323/… ) දිග හතළිහක් පමණ වේ.
tchrist

14
ඒ . අවශ්‍ය නොවේ.
ටීඑල්ඩීයට

1
RFCs කතාවේ අවසානය නොවේ: ICANN තවදුරටත් 'තිත්' වසම් වලට ඉඩ නොදේ: icann.org/news/announcement-2013-08-30-en
Synchro

65

කුමන චරිත සඳහා අවසර දී ඇත්දැයි තීරණය කරන අතර, කරුණාකර ඔබේ අපකීර්තියට පත් සහ හයිපනය කළ මිතුරන් මතක තබා ගන්න. මගේ සමාගම මානව සම්පත් පද්ධතියෙන් මගේ නම භාවිතා කරමින් මගේ විද්‍යුත් තැපැල් ලිපිනය ජනනය කරන බවට මට පාලනයක් නැත. මගේ අන්තිම නාමයේ අපෝස්තලාපය එයට ඇතුළත් ය. මගේ විද්‍යුත් තැපැල් ලිපිනය "අවලංගු" නිසා වෙබ් අඩවියක් සමඟ අන්තර් ක්‍රියා කිරීම කොපමණ වාරයක් අවහිර කර ඇත්දැයි මට කිව නොහැක.


4
පුද්ගලයෙකුගේ නමින් අවසර දී ඇති දේ සහ අනවශ්‍ය දේ පිළිබඳව අනවශ්‍ය උපකල්පන කරන වැඩසටහන් වල මෙය සුපිරි පොදු ගැටළුවකි. යමෙකු එවැනි උපකල්පන නොකළ යුතුය, අදාළ RFC (ය) විසින් කළ යුතු යැයි කියන ඕනෑම චරිතයක් පිළිගන්න.
tchrist

4
ඔව්. ක්‍රමලේඛකයින් විද්‍යුත් තැපැල් ලිපිනයන්හි ලොකු අකුරු ප්‍රතික්ෂේප කිරීම ගැන මම විශේෂයෙන් කෝප වෙමි! මෝඩ සහ / හෝ කම්මැලි.
ෆිල්හෝ

63

මෙම රීජෙක්ස් පර්ල්ගේ ඊමේල් :: වලංගු පුස්තකාලයෙන්. එය වඩාත් නිවැරදි යැයි මම විශ්වාස කරමි, එය සියලු 822 ට ගැලපේ. තවද, එය පදනම් වී ඇත්තේ ඕ'රෙයිලි පොතේ නිත්‍ය ප්‍රකාශනය මත ය:

නිත්‍ය ප්‍රකාශන මාස්ටර් කිරීමේ නිත්‍ය ප්‍රකාශන ( http://www.ora.com/catalog/regexp/ ) හි ජෙෆ්රි ෆ්‍රීඩ්ල්ගේ උදාහරණය භාවිතා කරමින් ගොඩනගා ඇත.

$RFC822PAT = <<'EOF';
[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\
xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xf
f\n\015()]*)*\)[\040\t]*)*(?:(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\x
ff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015
"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\
xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80
-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*
)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\
\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\
x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x8
0-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n
\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x
80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^
\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040
\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([
^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\
\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\
x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-
\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()
]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\
x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\04
0\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\
n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\
015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?!
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\
]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\
x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\01
5()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*|(?:[^(\040)<>@,;:".
\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]
)|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^
()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]*(?:(?:\([^\\\x80-\xff\n\0
15()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][
^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)|"[^\\\x80-\xff\
n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\
x80-\xff\000-\010\012-\037]*)*<[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?
:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-
\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:@[\040\t]*
(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015
()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()
]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\0
40)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\
[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\
xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*
)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80
-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x
80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t
]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\
\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])
*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x
80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80
-\xff\n\015()]*)*\)[\040\t]*)*)*(?:,[\040\t]*(?:\([^\\\x80-\xff\n\015(
)]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\
\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*@[\040\t
]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\0
15()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015
()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(
\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|
\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80
-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()
]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x
80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^
\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040
\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".
\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff
])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\
\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x
80-\xff\n\015()]*)*\)[\040\t]*)*)*)*:[\040\t]*(?:\([^\\\x80-\xff\n\015
()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\
\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)?(?:[^
(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-
\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\
n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|
\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))
[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff
\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\x
ff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(
?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\
000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\
xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\x
ff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)
*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\x
ff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-
\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)
*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\
]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\]
)[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-
\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\x
ff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(
?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80
-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<
>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x8
0-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:
\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]
*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)
*\)[\040\t]*)*)*>)
EOF

14
O_O ඔබ එය කරන්නේ කුමක් දැයි තේරුම් ගැනීමට රීජෙක්ස් මාස්ටර් විය යුතුය
ක්‍රිස් මැක්ග්‍රාත්

45

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

filter_var($value, FILTER_VALIDATE_EMAIL)

ඔබ 5.3.6 ට වඩා අඩු php- අනුවාදයක් ධාවනය කරන්නේ නම් කරුණාකර මෙම ගැටලුව ගැන සැලකිලිමත් වන්න: https://bugs.php.net/bug.php?id=53091

මෙම බිඩ්-ඉන් වලංගු කිරීම ක්‍රියාත්මක වන ආකාරය පිළිබඳ වැඩි විස්තර ඔබට අවශ්‍ය නම්, මෙහි බලන්න: PHP හි පෙරහන්_වර් FILTER_VALIDATE_EMAIL ඇත්ත වශයෙන්ම ක්‍රියාත්මක වේද?


මම කියන්නට යන දෙය හරියටම ඡන්දය ලබා ගනී. IDN හසුරුවන්නේ නැත, නමුත් කලින් ද pun ුවම් කේතයක් බවට පරිවර්තනය කිරීම මෙය විසඳයි. PHP> = 5.3 සඳහා idn_to_ascii () ඇත. විද්‍යුත් තැපෑලක් වලංගු කිරීම සඳහා හොඳම සහ පහසුම ක්‍රමවලින් එකක්.
ටේලර්

43

කැල් හෙන්ඩර්සන් (ෆ්ලිකර්) පීඑච්පී හි ඊමේල් ලිපින විග්‍රහ කිරීම නමින් ලිපියක් ලියා ඇති අතර නිසි RFC (2) 822 අනුකූල ඊමේල් ලිපින විග්‍රහ කිරීම කරන්නේ කෙසේදැයි පෙන්වයි. සීසී බලපත්‍රලාභී php , python සහ ruby ​​වලින්ද ඔබට ප්‍රභව කේතය ලබා ගත හැකිය .


එය a@bවලංගු බව මට පැවසුවා
dsdsdsdsd

1
sdsdsdsdsd a@bවලංගු බැවින් ... මේ අවස්ථාවේ bදී ඉහළ මට්ටමේ වසම වේ.
rink.attendant.6

42

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


1
මෙය දිග සහ අන්තර්ගතය සඳහා සලකුණු කර ඇත, නමුත් එය තවමත් ඡන්ද 41 ක් සහිත හොඳ දායකත්වයක් වන අතර එය මකා නොදැමිය යුතුය.
විල්

37

සැබවින්ම භාවිතා කළ හැකි එකක් නොමැත.
මම මගේ සමහර කරුණු ගැන සාකච්ඡා ඊ-තැපැල් ලිපිනය වලංගු සඳහා පවතී පිළිතුරු සොයන PHP පුස්තකාල? , ඊමේල් ලිපිනය Regexp හඳුනාගැනීමේදීද එය සාකච්ඡා කෙරේ.

කෙටියෙන් කිවහොත්, භාවිතා කළ හැකි තනි රීජෙක්ස් නිසි රැකියාවක් කරනු ඇතැයි අපේක්ෂා නොකරන්න. හොඳම රීජෙක්ස් මගින් වාක්‍ය ඛණ්ඩය වලංගු වනු ඇත, විද්‍යුත් තැපෑලක වලංගු භාවය නොවේ (jhohn@example.com නිවැරදි නමුත් එය බොහෝ විට ඉහළට එනු ඇත ...).


මම වැරදියි නම් මාව නිවැරදි කරන්න, නමුත් PHP PCRE රටා භාවිතා කරන බව මම විශ්වාස කරමි. එසේ නම්, අබිගායිල්ගේ RFC 5322 රටාවට සමාන දෙයක් නිර්මාණය කිරීමට ඔබට හැකි විය යුතුය .
tchrist

chtchrist: PCRE මෙම වාක්‍ය ඛණ්ඩයට හසු වී ඇත්දැයි විශ්වාස නැත (මා සොයා ගන්නා). එසේ නම්, පීඑච්පී හි පීසීආර්ඊ හි මෙම අනුවාදය හසු වී ඇත්දැයි විශ්වාස නැත ... හොඳයි, මම මෙම වාක්‍ය ඛණ්ඩය නිවැරදිව තේරුම් ගත්තා නම්, ඔබට පීඊජී විග්‍රහයක් භාවිතා කළ හැකිය.
ෆිල්හෝ

PCRE එයට හසු වී ඇත, නමුත් සමහර විට PHP PCRE සමඟ සම්බන්ධ වී නොමැත. ☹
tchrist

36

අවම වශයෙන් කිසිදු වලංගු ඊමේල් ලිපිනයක් ප්‍රතික්ෂේප නොකරන එක් සරල නිත්‍ය ප්‍රකාශනයක් වනුයේ යමක් පරික්ෂා කිරීම, පසුව @ ලකුණක් සහ පසුව යම් කාල පරිච්ඡේදයක් සහ අවම වශයෙන් 2 ක් වත් පරීක්ෂා කිරීමයි. එය කිසිවක් ප්‍රතික්ෂේප නොකරනු ඇත, නමුත් පිරිවිතර සමාලෝචනය කිරීමෙන් පසු වලංගු හා ප්‍රතික්ෂේප කළ හැකි විද්‍යුත් තැපෑලක් මට සොයාගත නොහැක.

email = ~ /.+@[^@]+\.[^@]{2,}$/


3
මම සොයමින් සිටියේ මෙයයි. ඉතා සීමිත නොවේ, නමුත් 1 only ක් පමණක් ඇති බවට වග බලා ගන්න (අපි ලැයිස්තුවක් විග්‍රහ කර ඇති අතර කොමා නොමැති බව තහවුරු කර ගැනීමට අවශ්‍ය බැවින්). FYI, ඔබට උපුටා දැක්වීම් තිබේ නම් වම් පසින් @ එකක් තිබිය හැකිය: Valid_email_addresses , නමුත් එය තරමක් වාටියකි .
ජොෂ්

2
එය භාවිතා කිරීමෙන් පසුව, එය හරියටම ක්‍රියාත්මක නොවන බව අවබෝධ විය. /^[^@]+@[^@]+\.[^@]{2}[^@]*$/ ඇත්ත වශයෙන්ම 1 @ ලකුණක් පරික්ෂා කරයි. අවසානයේ දී * නිසා ඔබේ රීජෙක්ස් එකකට වඩා වැඩි ගණනක් ඉඩ දෙනු ඇත.
ජොෂ්

1
හරි. මම අවලංගු සියල්ල ප්‍රතික්ෂේප කිරීමට උත්සාහ නොකරමි, වලංගු ඊමේල් ලිපිනයක් ප්‍රතික්ෂේප කිරීමෙන් වළකින්න.
spig

1
මෙය භාවිතා කිරීම වඩා හොඳ වනු ඇත: /^[^@]+@[^@]+\.[^@]{2,4}$/එය අකුරු 2 සිට 4 දක්වා අවසන් වන බවට වග බලා ගන්න. @ ජොෂ් පෙන්වා දුන් පරිදි, දැන් එය අවසානයේ දී අතිරේක to ට ඉඩ දෙයි. නමුත් ඔබට එයද වෙනස් කළ හැකිය: /^[^@]+@[^@]+\.[^a-z-A-Z]{2,4}$/සියලු ඉහළ මට්ටමේ වසම් aZ අක්ෂර බැවින්. ඔබ විස්ථාපනය කල හැකි 4සමග 5ඉහළ පෙළේ වසම් නම් මෙන්ම අනාගතයේ දී තවදුරටත් වීමට ඉඩ හෝ ඊට වැඩි.
ප්ලයි

@FLY, කා @ ෆූ . ප්‍රතිලාභ නිවැරදි ය. එය ප්‍රමිති අනුව කළ යුතුද?
SexyBeast

29

ඔබට jQuery වලංගුකරණ ප්ලගිනය භාවිතා කළ එක භාවිතා කළ හැකිය:

/^((([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

මෙය හොඳ කාර්යයක් කරන බව පෙනේ. එයට ඉඩ දී ඇත: a-b'c_d.e@f-g.hනමුත් නුසුදුසු වෙනස්කම් අල්ලා ගැනීමට හැකි විය, a-b'c_d.@f-g.hසහa-b'c_d.e@f-.h
dsdsdsdsd

25

ඊමේල් ලිපිනයක් වලංගු කිරීම සඳහා හොඳම නිත්‍ය ප්‍රකාශනයේ වඩාත් සවිස්තරාත්මක ඇගයීම සඳහා කරුණාකර මෙම සබැඳිය බලන්න; " නිත්‍ය ප්‍රකාශන වලංගු කරන විද්‍යුත් තැපැල් ලිපිනය සංසන්දනය කිරීම "

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

/^([\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

spoon16: එම සබැඳිය ඇත්ත වශයෙන්ම නිවැරදි නොවේ. ඊමේල් ලිපින වලංගු කිරීම සඳහා පරිපූර්ණ රටාවක් තිබිය නොහැකි බවට කරන ප්‍රකාශය දෝෂ සහිතය. ඔබට හැකිය , නමුත් ඔබ ලිපිය දක්වාම RFC අනුගමනය කරන බවට වග බලා ගත යුතුය. ඔබත් නිවැරදි RFC තෝරා ගත යුතුයි.
tchrist

"හොඳම" දැන් ජාවා රීජෙක්ස් සමඟ ක්‍රියා නොකරයි - නිසි ලෙස පැන ගොස් නූල් පරිවර්තනය කිරීමෙන් පසුව පවා.
එරික් චෙන්

23

ලතින් නොවන (චීන, අරාබි, ග්‍රීක, හෙබ්‍රෙව්, සිරිලික් සහ යනාදී) වසම් නාම නුදුරු අනාගතයේදී අවසර දිය යුතු බව සඳහන් නොකල යුතුය . එම චරිත නියත වශයෙන්ම ආවරණය නිසා නොහැකියි හැමෝම, භාවිතා කරන ඊ-තැපැල් regex වෙනස් කිරීමට ඇති [a-z]/iහෝ\w . ඒවා සියල්ලම අසාර්ථක වනු ඇත.

සියලු පසු, හොඳම ඊ-තැපැල් ලිපිනය තහවුරු කරන්න ක්රමයක් ඇත්තටම කිරීමට තවමත් යැවීමට ඊමේල් . ඊමේල් ලිපිනය පරිශීලක සත්‍යාපනයේ කොටසක් නම් (රෙජිස්ටර් / පිවිසුම් / යනාදිය), එවිට ඔබට එය පරිශීලක සක්‍රීය කිරීමේ පද්ධතිය සමඟ පරිපූර්ණව ඒකාබද්ධ කළ හැකිය. එනම්, විශේෂිත ඊමේල් ලිපිනයට අද්විතීය සක්‍රිය කිරීමේ යතුරක් සහිත සබැඳියක් සහිත ඊ-තැපෑලක් යවන අතර පරිශීලකයා විද්‍යුත් තැපෑලෙහි ඇති සබැඳිය භාවිතා කර අලුතින් සාදන ලද ගිණුම සක්‍රීය කළ විට පමණක් ප්‍රවේශ වීමට ඉඩ දෙන්න.

රීජෙක්ස් හි අරමුණ යූඅයි හි පරිශීලකයාට නිශ්චිත ඊමේල් ලිපිනය නිවැරදි ආකෘතියෙන් නොපෙන්වන බව ඉක්මනින් දැනුම් දීම නම්, එය මූලික වශයෙන් පහත සඳහන් රීජෙක්ස් වලට ගැලපේදැයි පරීක්ෂා කිරීම වඩාත් සුදුසුය:

^([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)$

ඒ තරම් සරළයි. නමේ සහ වසමේ භාවිතා වන අක්ෂර ගැන ඔබ පොළොවේ සැලකිලිමත් වන්නේ ඇයි? වලංගු ඊමේල් ලිපිනයක් ඇතුළත් කිරීම සේවාදායකයාගේ වගකීම මිස සේවාදායකයාගේ නොවේ. සේවාදායකයා වැනි සින්ටැක්ටිකල් වලංගු ඊමේල් ලිපිනයකට ඇතුළු වූ විට පවා aa@bb.cc, එය නීත්‍යානුකූල ඊමේල් ලිපිනයක් බව සහතික නොවේ. කිසිවෙකුට එය ආවරණය කළ නොහැකිය.


4
සත්‍යාපන පණිවිඩයක් යැවීම සාමාන්‍යයෙන් මේ ආකාරයේ දේවල් සඳහා හොඳම ක්‍රමය බව මම එකඟ වෙමි, කෘතිමව නිවැරදි හා වලංගු නොවේ. "තහවුරු කිරීම" සඳහා මගේ ඊමේල් ලිපිනය දෙවරක් ටයිප් කිරීමට මා පෙළඹවූ විට මා ටයිප් කළ දේ දෙස බැලීමට නොහැකි ලෙස මා කලකිරීමට පත් වේ. මම කෙසේ හෝ පළමුවැන්නා පිටපත් කරන්නේ දෙවනුව පමණි, එය වැඩි වැඩියෙන් භාවිතා වන බව පෙනේ.
පීට්

එකඟ වන්න! නමුත් මේ regex මම හිතන්නේ නැහැ එය ඉඩ නිසා වලංගු නෑ spacesපසු @.උදා. test@test.ca com netවලංගු ඊ-තැපෑලක් භාවිතා කිරීමෙන් වලංගු ඊ-තැපෑලක් සලකා බලන්න.
සීබී 4

20

මෙම HTML5 පිරිවිතර යෝජනා ඊ-තැපැල් ලිපින මාෙර සඳහා සරල regex:

/^[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])?)*$/

මෙය හිතාමතාම RFC 5322 සමඟ අනුකූල නොවේ .

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

RFC 3696 errata 1690 අනුව මුළු දිග අක්ෂර 254 කට සීමා කළ හැකිය .


හොඳම පිළිතුර! W3 නිර්දේශයට සබැඳියක් මෙන්න: w3.org/TR/html5/forms.html#valid-e-mail-address මෙම රීජෙක්ස් බොහෝ බ්‍රව්සර් විසින් අනුගමනය කරනු ලැබේ.
රයන් ටේලර්

3
මෙය SO හොඳම පිළිතුර නොවේ! මෙම රටාව මෙම අවලංගු ලිපිනයට සම්පූර්ණයෙන්ම ගැලපේ : invalid@emailaddress. ඔබ එය භාවිතා කිරීමට පෙර පරිස්සම් සහ බොහෝ පරීක්ෂණ ඉල්ලා සිටිමි!
ෂෙරීඩන්

Her ෂෙරීඩන්, HTML5 පිරිවිතරයේ ගැටලුවක් ඇතැයි ඔබ සිතන්නේ නම් ඔබට මෙහි ප්‍රශ්නයක් මතු කළ හැකිය: github.com/w3c/html/issues
ලූනා

මෙය stackoverflow.com/a/8829363 ට වඩා වැඩි යමක් එකතු නොකරන අතර එය සංස්කරණය කිරීම හෝ අදහස් දැක්වීම ලෙස IMHO වඩා හොඳ වනු ඇත.

උදාහරණ @ localhost වලංගු වේ, නමුත් සැබෑ ලෝක යෙදුමක් සඳහා ඔබට වසම් දිගුවක් බලාත්මක කිරීමට අවශ්‍ය විය හැකිය, ඔබ කළ යුත්තේ මෙය සාක්ෂාත් කර ගැනීම සඳහා අවසාන * a + ලෙස වෙනස් කිරීමයි (රටාවේ එම කොටස 0+ සිට 1+ දක්වා වෙනස් කිරීම )
මිච් සැච්වෙල්

15

විචිත්‍රවත් නිරූපණයක් සඳහා, පහත දැක්වෙන රාක්ෂයා ඉතා හොඳ නමුත් තවමත් කෘතිමව වලංගු ඊමේල් ලිපින සියල්ලම නිවැරදිව හඳුනාගෙන නොමැත: එය මට්ටම් හතරක් දක්වා ගැඹුරට කැදැලි අදහස් හඳුනා ගනී.

මෙය විග්‍රහ කරන්නෙකුගේ රැකියාවකි, නමුත් ලිපිනයක් කෘතිමව වලංගු වුවද, එය තවමත් ලබා දිය නොහැකි විය හැකිය. සමහර විට ඔබට "හේයි, ඔව්, අපව බලන්න!" හිල්බිලි ක්‍රමයට යොමුවිය යුතුය.

// derivative of work with the following copyright and license:
// Copyright (c) 2004 Casey West.  All rights reserved.
// This module is free software; you can redistribute it and/or
// modify it under the same terms as Perl itself.

// see http://search.cpan.org/~cwest/Email-Address-1.80/

private static string gibberish = @"
(?-xism:(?:(?-xism:(?-xism:(?-xism:(?-xism:(?-xism:(?-xism:\
s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+
|\s+)*[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+(?-xism:(?-xism:\
s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+
|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(
?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?
:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x
0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*<DQ>(?-xism:(?-xism:[
^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D])))+<DQ>(?-xism:(?-xi
sm:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xis
m:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\
]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\
s*)+|\s+)*))+)?(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?
-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:
\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[
^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*<(?-xism:(?-xi
sm:(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^(
)\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(
?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))
|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<
>\[\]:;@\,.<DQ>\s]+(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]
+)*)(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:
(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s
*\)\s*))+)*\s*\)\s*)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?
:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x
0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xi
sm:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*
<DQ>(?-xism:(?-xism:[^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D]
)))+<DQ>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\
]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-x
ism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+
)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))\@(?-xism:(?-xism:(?-xism:(
?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?
-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^
()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s
*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+(
?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+)*)(?-xism:(?-xism:
\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[
^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+)
)|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)
+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:
(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((
?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\
x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*\[(?:\s*(?-xism:(?-x
ism:[^\[\]\\])|(?-xism:\\(?-xism:[^\x0A\x0D])))+)*\s*\](?-xi
sm:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:
\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(
?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+
)*\s*\)\s*)+|\s+)*)))>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-
xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\
s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))|(?-xism:(?-x
ism:(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^
()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*
(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D])
)|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()
<>\[\]:;@\,.<DQ>\s]+(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s
]+)*)(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+)
)|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism
:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\
s*\)\s*))+)*\s*\)\s*)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((
?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\
x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-x
ism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)
*<DQ>(?-xism:(?-xism:[^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D
])))+<DQ>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\
\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-
xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)
+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))\@(?-xism:(?-xism:(?-xism:
(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(
?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[
^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\
s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+
(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+)*)(?-xism:(?-xism
:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:
[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+
))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*
)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism
:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\(
(?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A
\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*\[(?:\s*(?-xism:(?-
xism:[^\[\]\\])|(?-xism:\\(?-xism:[^\x0A\x0D])))+)*\s*\](?-x
ism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism
:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:
(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))
+)*\s*\)\s*)+|\s+)*))))(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?
>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:
\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0
D]))|)+)*\s*\)\s*))+)*\s*\)\s*)*)"
  .Replace("<DQ>", "\"")
  .Replace("\t", "")
  .Replace(" ", "")
  .Replace("\r", "")
  .Replace("\n", "");

private static Regex mailbox =
  new Regex(gibberish, RegexOptions.ExplicitCapture); 

12

නිල ප්‍රමිතියට අනුව 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])+)\])

ඔබට එය ජාවා හි භාවිතා කිරීමට අවශ්‍ය නම් එය ඉතා පහසුය

import java.util.regex.*;

class regexSample 
{
   public static void main(String args[]) 
   {
      //Input the string for validation
      String email = "xyz@hotmail.com";

      //Set the email pattern string
      Pattern p = Pattern.compile(" (?:[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])+)\\]");

      //Match the given string with the pattern
      Matcher m = p.matcher(email);

      //check whether match is found 
      boolean matchFound = m.matches();

      if (matchFound)
        System.out.println("Valid Email Id.");
      else
        System.out.println("Invalid Email Id.");
   }
}

1
ඔබේ රීජෙක්ස් හි පළමු ලොකු අකුර ඇතුළත් නොවේ. උදාහරණයක් ලෙස ලියනාඩෝ.ඩාවින්සිග්මේල්.කොම් සමහර පරිශීලකයින්ට කරදරයක් විය හැකිය. ඒ වෙනුවට මෙය භාවිතා කරන්න:(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-Za-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])+)\])
කෙබාබ් ක්‍රබ්බි

@ කෙබාබ්ක්‍රබ්බි ස්තූතියි, කරුණාකර පිළිතුර සංස්කරණය කරන්න, මම වෙනස පිළිගනිමි.
AZ_

මම ඔබේ පිළිතුරට එම වෙනස එකතු කළහොත් එය තවදුරටත් RFC 2822 නොවනු ඇත, එබැවින් එය නිවැරදි දැයි මම නොදනිමි.
කෙබාබ් ක්‍රබ්බි

11

මෙන්න මම භාවිතා කරන PHP. මෙහි වෙනත් විචාරකයෙකු විසින් ප්‍රකාශයට පත් කර ඇති පරිදි “ව්‍යාජ ධනාත්මක දේට වඩා හොඳ ධනාත්මක ප්‍රති of ල” යන තේමාව යටතේ මම මෙම විසඳුම තෝරාගෙන ඇති අතර ඔබේ ප්‍රතිචාර කාලය වැඩි කිරීම සහ සේවාදායකය පැටවීම අඩු කිරීම සම්බන්ධයෙන් ... ඇත්ත වශයෙන්ම සේවාදායක සම්පත් නාස්ති කිරීමේ අවශ්‍යතාවයක් නොමැත මෙය වඩාත් සරල පරිශීලක දෝෂයක් තුරන් කරන නිත්‍ය ප්‍රකාශනයකි. ඔබට අවශ්‍ය නම් පරීක්ෂණ විද්‍යුත් තැපෑලක් යැවීමෙන් ඔබට මෙය සැමවිටම අනුගමනය කළ හැකිය.

function validateEmail($email) {
  return (bool) stripos($email,'@');
}

1
අ) "අපද්‍රව්‍ය සේවාදායක සම්පත්" අනන්තය, නමුත් ඔබ එතරම් නැඹුරු නම්, ඔබට එය ජේඑස් සමඟ සේවාදායකයාගේ පැත්තෙන් කළ හැකිය. ආ) ඔබට ලියාපදිංචි තැපෑලක් යැවීමට අවශ්‍ය වන්නේ කුමක්ද සහ පරිශීලකයා මට ඇතුල් වන්නේ @ අමතක වූ ඩොට්කොම්? ඔබගේ "විසඳුම" අසමත් වන අතර ඔබට පරිශීලකයෙකු අහිමි වේ.
ජෝන්ජොන්

අ) ජාවාස්ක්‍රිප්ට් අක්‍රිය වූ විට අසමත් වන JS වලංගු භාවයක් මත රඳා සිටීම හොඳම අදහස ලෙස පෙනෙන්නේ නැත (යන්තම්
btw

11

RFC 5322 ප්‍රමිතිය:

තිත්-පරමාණු දේශීය-කොටස, උපුටා ගත්-නූල් දේශීය-කොටස, යල්පැනගිය (මිශ්‍ර තිත-පරමාණු සහ උපුටා ගත්-නූල්) දේශීය-කොටස, වසම් නාම වසම, (IPv4, IPv6, සහ IPv4 සිතියම්ගත කළ IPv6 ලිපිනය) වසම් වචනාර්ථ වසම, සහ (කැදැලි) CFWS.

'/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD'

RFC 5321 ප්‍රමිතිය:

තිත්-පරමාණු දේශීය-කොටස, උපුටා ගත්-නූල් දේශීය-කොටස, වසම් නාම වසම සහ (IPv4, IPv6, සහ IPv4- සිතියම්ගත කළ IPv6 ලිපිනය) වසම් වචනාර්ථ වසමට ඉඩ දෙයි.

'/^(?!(?>"?(?>\\\[ -~]|[^"])"?){255,})(?!"?(?>\\\[ -~]|[^"]){65,}"?@)(?>([!#-\'*+\/-9=?^-~-]+)(?>\.(?1))*|"(?>[ !#-\[\]-~]|\\\[ -~])*")@(?!.*[^.]{64,})(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>\.(?2)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?3)){7}|(?!(?:.*[a-f0-9][:\]]){8,})((?3)(?>:(?3)){0,6})?::(?4)?))|(?>(?>IPv6:(?>(?3)(?>:(?3)){5}:|(?!(?:.*[a-f0-9]:){6,})(?5)?::(?>((?3)(?>:(?3)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?6)){3}))\])$/iD'

මූලික:

තිත්-පරමාණු දේශීය-කොටස සහ ඩොමේන් නාම වසමට ඉඩ දෙන්න (අකාරාදී අක්ෂර 2-6 කට සීමා වූ ටීඑල්ඩී සමඟ අවම වශයෙන් ඩොමේන් නාම ලේබල් දෙකක් අවශ්‍ය වේ).

"/^(?!.{255,})(?!.{65,}@)([!#-'*+\/-9=?^-~-]+)(?>\.(?1))*@(?!.*[^.]{64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?\.){1,126}[a-z]{2,6}$/iD"

මොන යක්ෂ භාෂාවද? මට /Dධජයක් පෙනේ , ඔබ එය තනි උපුටා දැක්වීම් වලින් උපුටා දක්වා ඇති අතර රටාව සීමා කිරීම සඳහා කප්පාදුවක් ද භාවිතා කර තිබේද? එය පර්ල් නොවේ, එය PCRE විය නොහැක. එබැවින් එය PHP ද? වැනි පුනරාවර්තනයට ඉඩ දෙන එකම තිදෙනා ඒවා බව මම විශ්වාස කරමි (?1).
tchrist

එය PCRE භාවිතා කරන PHP හි ඇත. කප්පාදුව භාවිතා කරනුයේ වරහන්, වර්ග වරහන්, සහ ඇත්ත වශයෙන්ම කප්පාදුව සහ තනි උපුටා දැක්වීම් වැනි විශේෂ අක්ෂර සීමා කිරීමට පමණි. / D ධජය, ඔබ නොදැන සිටියේ නම්, නූල් කෙළවරට නව රේඛාවක් එක් කිරීම වැළැක්වීමයි, එය වෙනත් ආකාරයකින් ඉඩ දෙනු ඇත.
මයිකල් රුෂ්ටන්

9

අක්ෂර 4 ක් TLD වලට "ඉඩ දිය නොහැකි" වීම පුදුමයකි. ඔබ .info සහ .name වලින් පුද්ගලයින් තහනම් කරන අතර දිග සීමා කිරීම නතර කරයි .ට්‍රැවල් සහ .මියුසියම් , නමුත් ඔව්, ඒවා අක්ෂර 2 ට වඩා අඩු වන අතර TLD අක්ෂර 3 ට වඩා අඩුය.

ලොකු අකුරු වලටද ඔබ ඉඩ දිය යුතුය. විද්‍යුත් තැපැල් පද්ධති මඟින් දේශීය කොටස සහ වසම් කොටස සාමාන්‍යකරණය කරනු ඇත.

ඔබගේ ඩොමේන් කොටස නැවත සකස් කිරීම සඳහා, ඩොමේන් නාමය '-' සමඟ ආරම්භ කළ නොහැකි අතර '-' සමඟ අවසන් විය නොහැක. ඩෑෂ් අතර රැඳී සිටිය හැක්කේ ඒවා අතර පමණි.

ඔබ PEAR පුස්තකාලය භාවිතා කළේ නම්, ඔවුන්ගේ තැපැල් ක්‍රියාකාරිත්වය පරීක්ෂා කරන්න (නිශ්චිත නම / පුස්තකාලය අමතක වී ඇත). එක් ශ්‍රිතයක් ඇමතීමෙන් ඔබට විද්‍යුත් තැපැල් ලිපිනය වලංගු කළ හැකි අතර එය RFC822 හි අර්ථ දැක්වීම අනුව විද්‍යුත් තැපැල් ලිපිනය වලංගු කරයි.


2
Ose ජෝසෙප් යී: ආර්එෆ්සී 822 ටිකක් දින වකවානු නොවේද?
tchrist

8
public bool ValidateEmail(string sEmail)
{
    if (sEmail == null)
    {
        return false;
    }

    int nFirstAT = sEmail.IndexOf('@');
    int nLastAT = sEmail.LastIndexOf('@');

    if ((nFirstAT > 0) && (nLastAT == nFirstAT) && (nFirstAT < (sEmail.Length - 1)))
    {
        return (Regex.IsMatch(sEmail, @"^[a-z|0-9|A-Z]*([_][a-z|0-9|A-Z]+)*([.][a-z|0-9|A-Z]+)*([.][a-z|0-9|A-Z]+)*(([_][a-z|0-9|A-Z]+)*)?@[a-z][a-z|0-9|A-Z]*\.([a-z][a-z|0-9|A-Z]*(\.[a-z][a-z|0-9|A-Z]*)?)$"));
    }
    else
    {
        return false;
    }
}
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.