如何使用 JavaScript 验证电子邮件地址?
- 2024-11-02 20:59:00
- admin 原创
- 34
问题描述:
我想在将用户输入发送到服务器或尝试向其发送电子邮件之前,用 JavaScript 检查用户输入是否为电子邮件地址,以防止最基本的输入错误。我该如何实现这一点?
解决方案 1:
使用正则表达式可能是在 JavaScript 中验证电子邮件地址的最佳方法。查看来自Chromium 的JSFiddle 上的一组测试。
const validateEmail = (email) => {
return String(email)
.toLowerCase()
.match(
/^(([^<>()[]\\.,;:s@"]+(.[^<>()[]\\.,;:s@"]+)*)|.(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/
);
};
以下是接受unicode的正则表达式的示例。
const re =
/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i;
请记住,不应仅依赖 JavaScript 验证,因为客户端可以轻松禁用 JavaScript。此外,在服务器端进行验证也很重要。
以下代码片段是 JavaScript 在客户端验证电子邮件地址的示例。
const validateEmail = (email) => {
return email.match(
/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/
);
};
const validate = () => {
const $result = $('#result');
const email = $('#email').val();
$result.text('');
if(validateEmail(email)){
$result.text(email + ' is valid.');
$result.css('color', 'green');
} else{
$result.text(email + ' is invalid.');
$result.css('color', 'red');
}
return false;
}
$('#email').on('input', validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="email">Enter email address</label>
<input id="email" type="email">
<p id="result"></p>
运行代码片段Hide results展开片段
解决方案 2:
对于那些想要以以下形式进行真正简单验证的人,我稍微修改了Jaymon 的答案:
anystring@anystring.anystring
正则表达式:
/^S+@S+.S+$/
为了防止匹配多个@符号:
/^[^s@]+@[^s@]+.[^s@]+$/
上述正则表达式匹配整个字符串,如果要匹配字符串中的任何位置,请删除前导和^
尾随。下面的示例匹配字符串中的任何位置。$
如果您确实想匹配整个字符串,您可能trim()
首先需要匹配字符串。
JavaScript 函数示例:
function validateEmail(email) {
var re = /S+@S+.S+/;
return re.test(email);
}
console.log(validateEmail('my email is anystring@anystring.any')); // true
console.log(validateEmail('my email is anystring@anystring .any')); // false
运行代码片段Hide results展开片段
解决方案 3:
为了完整起见,这里还有另一个符合 RFC 2822 的正则表达式
官方标准称为RFC 2822。它描述了有效电子邮件地址必须遵守的语法。你可以(但你不应该——请继续阅读)使用以下正则表达式来实现它:
(?:[a-z0-9!#$%&'*+/=?^_
{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|\[x01-x09x0bx0cx0e-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-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|\[x01-x09x0bx0cx0e-x7f])+)])
(...) 如果我们省略使用双引号和方括号的语法,我们将获得更实用的 RFC 2822 实现。它仍将匹配当今实际使用的所有电子邮件地址的 99.99%。
[a-z0-9!#$%&'*+/=?^_
{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
您可以进行的另一项更改是允许任何两个字母的国家/地区代码顶级域名,并且仅允许特定的通用顶级域名。此正则表达式会过滤虚拟电子邮件地址,例如
asdf@adsf.adsf
。您需要在添加新的顶级域名时对其进行更新。
[a-z0-9!#$%&'*+/=?^_
{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)
因此,即使遵循官方标准,也需要做出权衡。不要盲目地从在线库或讨论论坛复制正则表达式。始终在您自己的数据和您自己的应用程序上测试它们。
强调我的
解决方案 4:
哇,这里太复杂了。如果你只想捕捉最明显的语法错误,我会这样做:
^S+@S+$
它通常会捕获用户所犯的最明显的错误并确保表单基本正确,这就是 JavaScript 验证的全部内容。
编辑:我们还可以使用以下方法检查电子邮件中的“。”
/^S+@S+.S+$/
解决方案 5:
在您决定使用正则表达式来验证电子邮件时,您必须明白一件事:这可能不是一个好主意。一旦您接受了这一点,就会发现有很多实现方法可以帮助您实现一半目标,本文很好地总结了它们。
简而言之,唯一可以绝对肯定地确定用户输入的内容确实是电子邮件的方法就是实际发送电子邮件并查看结果。除此之外,一切都只是猜测。
解决方案 6:
HTML5 本身就有电子邮件验证。如果你的浏览器支持 HTML5,那么你可以使用以下代码。
<form>
<label>Email Address
<input type="email" placeholder="me@example.com" required>
</label>
<input type="submit">
</form>
jsFiddle链接
来自HTML5 规范:
有效的电子邮件地址是与以下 ABNF 的产生式匹配的字符串
email = 1*( atext / "." ) "@" label *( "." label ) label = let-dig [ [ ldh-str ] let-dig ] ; limited to a length of 63 characters by RFC 1034 section 3.5 atext = < as defined in RFC 5322 section 3.2.3 > let-dig = < as defined in RFC 1034 section 3.5 > ldh-str = < as defined in RFC 1034 section 3.5 >
此要求故意违反RFC 5322,该规范定义的电子邮件地址语法过于严格(“@”字符之前)、过于模糊(“@”字符之后)并且过于宽松(允许以大多数用户不熟悉的方式使用注释、空格字符和带引号的字符串),因此在此不具有实际用途。
以下与 JavaScript 和 Perl 兼容的正则表达式是上述定义的实现。
/^[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])?)*$/
解决方案 7:
我发现这是最好的解决方案:
/^[^s@]+@[^s@]+.[^s@]+$/
它允许以下格式:
1.prettyandsimple@example.com 2.very.common@example.com
3.disposable.style.email.with+symbol@example.com 4.other.email-with-dash@example.com
9.
# ! $
% &'*+-/=?^_`{}| 〜@example.org
6. "()[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org
7.“ “@example.org (引号之间有空格)
8. üñîçøðé@example.com(本地部分的 Unicode 字符)
9. üñîçøðé@üñîçøðé.com(域名部分为 Unicode 字符)
10.Pelé@example.com(拉丁语)
11. δοκιμή@παράδειγμα.δοκιμή(希腊语)
12. 我买@屋企.香港 (中文)
13.甲斐@黒川.日本(日语)
14. чебурашка@ящик-с-апельсинами.рф(西里尔文)
它显然用途广泛,允许使用所有重要的国际字符,同时仍强制执行基本的anything@anything.anything格式。它将阻止 RFC 在技术上允许的空格,但这些空格非常罕见,所以我很乐意这样做。
解决方案 8:
在现代浏览器中,你可以在@Sushil 的答案之上使用纯 JavaScript 和DOM进行构建:
function validateEmail(value) {
var input = document.createElement('input');
input.type = 'email';
input.required = true;
input.value = value;
return typeof input.checkValidity === 'function' ? input.checkValidity() : /S+@S+.S+/.test(value);
}
我在小提琴http://jsfiddle.net/boldewyn/2b6d5/中整理了一个示例。 结合功能检测和Squirtle's Answer中的最基本验证,它可以让您摆脱正则表达式大屠杀,并且不会在旧浏览器上出现问题。
解决方案 9:
JavaScript 可以匹配正则表达式:
emailAddress.match( / some_regex /);
以下是电子邮件的RFC22正则表达式:
^((?>[a-zA-Zd!#$%&'*+-/=?^_`{|}~]+x20*|"((?=[x01-x7f])[^"\\]|\\[x01-x7f])*
"x20*)*(?<angle><))?((?!.)(?>.?[a-zA-Zd!#$%&'*+-/=?^_`{|}~]+)+|"((?=[x01-x
7f])[^"\\]|\\[x01-x7f])*")@(((?!-)[a-zA-Zd-]+(?<!-).)+[a-zA-Z]{2,}|[(((?(?<
![).)(25[0-5]|2[0-4]d|[01]?d?d)){4}|[a-zA-Zd-]*[a-zA-Zd]:((?=[x01-x7f])
[^\\[]]|\\[x01-x7f])+)])(?(angle)>)$
解决方案 10:
所有电子邮件地址都包含“at”(即 @)符号。测试必要条件:
email.includes('@')
或者,如果您需要支持 IE/旧版浏览器:
email.indexOf('@') > 0
不要为更复杂的事情烦恼。即使你能完美地确定一封电子邮件是否符合 RFC 语法,也无法告诉你它是否属于提供它的人。这才是真正重要的。
为了测试这一点,请发送一条验证消息。
解决方案 11:
正确验证符合 RFC 的电子邮件地址并不是一行正则表达式就能实现的。我在 PHP 中发现的最好的解决方案的一篇文章是What is a valid email address?。显然,它已被移植到 Java。我认为该函数太复杂,无法移植和在 JavaScript 中使用。JavaScript /node.js 端口:https ://www.npmjs.com/package/email-addresses 。
一个好的做法是在客户端验证数据,但在服务器上仔细检查验证。考虑到这一点,您可以简单地在客户端检查字符串是否看起来像有效的电子邮件地址,并在服务器上执行严格检查。
下面是我用来检查字符串是否像有效邮件地址的 JavaScript 函数:
function looksLikeMail(str) {
var lastAtPos = str.lastIndexOf('@');
var lastDotPos = str.lastIndexOf('.');
return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
}
解释:
lastAtPos < lastDotPos
:最后一个@
应该在最后一个之前.
,因为@
不能是服务器名称的一部分(据我所知)。lastAtPos > 0
:最后一个之前应该有一些内容(电子邮件用户名)@
。str.indexOf('@@') == -1
`@@:地址中不应有。即使
@作为电子邮件用户名的最后一个字符出现,也必须用引号引起来,因此
"应位于该字符和地址的
@最后一个字符之间。
@`lastDotPos > 2
:最后一个点之前至少应有三个字符,例如a@b.com
。(str.length - lastDotPos) > 2
:最后一个点后面应该有足够的字符来形成一个双字符域。我不确定括号是否必要。
解决方案 12:
这是正确的 RFC822 版本。
function checkEmail(emailAddress) {
var sQtext = '[^\
\"\\\-\ÿ]';
var sDtext = '[^\
\[-\]\-\ÿ]';
var sAtom = '[^\ -\ \"\(\)\,\.\:-\<\>\@\[-\]\-\ÿ]+';
var sQuotedPair = '\\[\ -\]';
var sDomainLiteral = '\[(' + sDtext + '|' + sQuotedPair + ')*\]';
var sQuotedString = '\"(' + sQtext + '|' + sQuotedPair + ')*\"';
var sDomain_ref = sAtom;
var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
var sWord = '(' + sAtom + '|' + sQuotedString + ')';
var sDomain = sSubDomain + '(\.' + sSubDomain + ')*';
var sLocalPart = sWord + '(\.' + sWord + ')*';
var sAddrSpec = sLocalPart + '\@' + sDomain; // complete RFC822 email address spec
var sValidEmail = '^' + sAddrSpec + '$'; // as whole string
var reValidEmail = new RegExp(sValidEmail);
return reValidEmail.test(emailAddress);
}
解决方案 13:
这是从http://codesnippets.joyent.com/posts/show/1917偷来的
email = $('email');
filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email.value)) {
// Yay! valid
return true;
}
else
{return false;}
解决方案 14:
这样做:
^([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)$
它基于RFC 2822
在https://regex101.com/r/857lzc/1上测试
通常,在数据库中存储电子邮件地址时,我会将其设为小写,实际上,正则表达式通常可以标记为不区分大小写。在这些情况下,这会稍微短一些:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
i
这是它在 JavaScript 中使用的一个示例(末尾带有不区分大小写的标志)。
var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
console.log( emailCheck.test('some.body@domain.co.uk') );
注意:
从技术上讲,一些电子邮件可以在符号之前的部分包含引号,@
并在引号内包含转义字符(因此您的电子邮件用户可能会很讨厌,并且包含诸如@
和 之类的内容,"..."
只要用引号写即可)。没有人会这样做!它已经过时了。但是,它包含在真正的RFC 2822标准中,这里省略了。
注 2:电子邮件的开头(@ 符号之前)可以区分大小写(根据规范)。但是,任何使用区分大小写的电子邮件的人可能都习惯遇到问题,而且在实践中,不区分大小写是一种安全的假设。更多信息:电子邮件地址区分大小写吗?
更多信息:http ://www.regular-expressions.info/email.html
解决方案 15:
我真的很想解决这个问题。所以我修改了上面的电子邮件验证正则表达式
原来的
/^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/
修改的
/^(([^<>()[].,;:s@"]+(.[^<>()[].,;:s@"]+)*)|(".+"))@(([^<>().,;s@"]+.{0,1})+[^<>().,;:s@"]{2,})$/
传递维基百科电子邮件地址中的示例。
您可以在此处看到结果。
解决方案 16:
只需使用 HTML 检查输入的电子邮件地址是否有效。
<input type="email"/>
无需编写函数进行验证。
解决方案 17:
您不应该使用正则表达式来验证输入字符串是否是电子邮件。这太复杂了,无法涵盖所有情况。
现在,由于您只能涵盖 90% 的情况,因此请编写类似以下内容的内容:
function isPossiblyValidEmail(txt) {
return txt.length > 5 && txt.indexOf('@')>0;
}
您可以对其进行改进。例如,“aaa@”是有效的。但总的来说,您已经掌握了要点。不要得意忘形……一个简单的 90% 解决方案比不起作用的 100% 解决方案要好。
世界需要更简单的代码......
解决方案 18:
维基百科标准邮件语法:
https://en.wikipedia.org/wiki/Email_address#Examples
https://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique#Syntaxe_exacte
功能 :
function validMail(mail)
{
return /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>().,;s@\"]+.{0,1})+([^<>().,;:s@\"]{2,}|[d.]+))$/.test(mail);
}
有效电子邮箱:
validMail('Abc@example.com') // Return true
validMail('Abc@example.com.') // Return true
validMail('Abc@10.42.0.1') // Return true
validMail('user@localserver') // Return true
validMail('Abc.123@example.com') // Return true
validMail('user+mailbox/department=shipping@example.com') // Return true
validMail('"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com') // Return true
validMail('!#$%&\'*+-/=?^_`.{|}~@example.com') // Return true
validMail('"()<>[]:,;@\\\"!#$%&\'-/=?^_`{}| ~.a"@example.org') // Return true
validMail('"Abc@def"@example.com') // Return true
validMail('"Fred Bloggs"@example.com') // Return true
validMail('"Joe.\\Blow"@example.com') // Return true
validMail('Loïc.Accentué@voilà.fr') // Return true
validMail('" "@example.org') // Return true
validMail('user@[IPv6:2001:DB8::1]') // Return true
无效电子邮件:
validMail('Abc.example.com') // Return false
validMail('A@b@c@example.com') // Return false
validMail('a"b(c)d,e:f;g<h>i[jk]l@example.com') // Return false
validMail('just"not"right@example.com') // Return false
validMail('this is"notallowed@example.com') // Return false
validMail('this still\"not\\allowed@example.com') // Return false
validMail('john..doe@example.com') // Return false
validMail('john.doe@example..com') // Return false
显示此测试: https: //regex101.com/r/LHJ9gU/1
解决方案 19:
正则表达式已更新!试试这个
let val = 'email@domain.com';
if(/^[a-z0-9][a-z0-9-_.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9]).[a-z0-9]{2,10}(?:.[a-z]{2,10})?$/.test(val)) {
console.log('passed');
}
Typscript 版本已完成
//
export const emailValid = (val:string):boolean => /^[a-z0-9][a-z0-9-_.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9]).[a-z0-9]{2,10}(?:.[a-z]{2,10})?$/.test(val);
解决方案 20:
很难让电子邮件验证器 100% 正确。唯一真正正确的方法是向帐户发送测试电子邮件。话虽如此,有一些基本检查可以帮助确保你得到合理的结果。
有待改进的地方:
不要使用 new RegExp
,而是尝试regexp
像这样写:
if (reg.test(/@/))
其次,检查确保符号后面有一个句号@
,并且 s 和句号之间有字符@
。
解决方案 21:
节点验证器的操作方式如下:
/^(?:[w!#$%&\'*+-/=?^`{|}~]+.)*[w!#$%&\'*+-/=?^`{|}~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-](?!.)){0,61}[a-zA-Z0-9]?.)+[a-zA-Z0-9](?:[a-zA-Z0-9-](?!$)){0,61}[a-zA-Z0-9]?)|(?:[(?:(?:[01]?d{1,2}|2[0-4]d|25[0-5]).){3}(?:[01]?d{1,2}|2[0-4]d|25[0-5])]))$/
解决方案 22:
不检查 TLD 存在性的解决方案是不完整的。
几乎所有的答案都建议使用正则表达式来验证电子邮件地址。我认为正则表达式只适用于基本的验证。电子邮件地址的验证似乎实际上是两个独立的问题:
1- 验证电子邮件格式:确保电子邮件是否符合 RFC 5322 中的电子邮件格式和模式,以及 TLD 是否确实存在。所有有效 TLD 的列表可在此处找到。
例如,虽然该地址example@example.ccc
将通过正则表达式,但它并不是有效的电子邮件,因为ccc
它不是 IANA 的顶级域名。
2-确保电子邮件确实存在:为此,唯一的选择是向用户发送电子邮件。
解决方案 23:
在验证器函数中使用此代码:
var emailID = document.forms["formName"]["form element id"].value;
atpos = emailID.indexOf("@");
dotpos = emailID.lastIndexOf(".");
if (atpos < 1 || ( dotpos - atpos < 2 ))
{
alert("Please enter correct email ID")
return false;
}
否则你可以使用jQuery。内部规则定义:
eMailId: {
required: true,
email: true
}
解决方案 24:
与squirtle相比,这是一个复杂的解决方案,但它在正确验证电子邮件方面做得非常好:
function isEmail(email) {
return /^((([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])+(.([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])+)*)|((x22)((((x20|x09)*(x0dx0a))?(x20|x09)+)?(([x01-x08x0bx0cx0e-x1fx7f]|x21|[x23-x5b]|[x5d-x7e]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(\\([x01-x09x0bx0cx0d-x7f]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF]))))*(((x20|x09)*(x0dx0a))?(x20|x09)+)?(x22)))@((([a-z]|d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(([a-z]|d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])([a-z]|d|-|.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])*([a-z]|d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF]))).)+(([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])([a-z]|d|-|.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])*([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])))$/i.test(email);
}
使用方式如下:
if (isEmail('youremail@yourdomain.com')){ console.log('This is email is valid'); }
解决方案 25:
var testresults
function checkemail() {
var str = document.validation.emailcheck.value
var filter = /^([w-]+(?:.[w-]+)*)@((?:[w-]+.)*w[w-]{0,66}).([a-z]{2,6}(?:.[a-z]{2})?)$/i
if (filter.test(str))
testresults = true
else {
alert("Please input a valid email address!")
testresults = false
}
return (testresults)
}
function checkbae() {
if (document.layers || document.getElementById || document.all)
return checkemail()
else
return true
}
<form name="validation" onSubmit="return checkbae()">
Please input a valid email address:<br />
<input type="text" size=18 name="emailcheck">
<input type="submit" value="Submit">
</form>
运行代码片段Hide results展开片段
解决方案 26:
我对正则表达式的了解并不多。这就是为什么我先用简单的正则表达式检查一般语法,然后再用其他函数检查更具体的选项。这可能不是最好的技术解决方案,但这样我会更加灵活和快速。
我遇到的最常见错误是空格(尤其是在开头和结尾)以及偶尔的双点。
function check_email(val){
if(!val.match(/S+@S+.S+/)){ // Jaymon's / Squirtle's solution
// Do something
return false;
}
if( val.indexOf(' ')!=-1 || val.indexOf('..')!=-1){
// Do something
return false;
}
return true;
}
check_email('check@thiscom'); // Returns false
check_email('check@this..com'); // Returns false
check_email(' check@this.com'); // Returns false
check_email('check@this.com'); // Returns true
解决方案 27:
这里有一个关于使用正则表达式验证电子邮件地址的非常好的讨论;“比较电子邮件地址验证正则表达式”
以下是当前最热门的表达式,与 JavaScript 兼容,仅供参考:
/^[-a-z0-9~!$%^&*_=+}{\'?]+(.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(.[-a-z0-9_]+)*.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}))(:[0-9]{1,5})?$/i
解决方案 28:
用于验证电子邮件地址的正则表达式
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+
解决方案 29:
显然,就是这样:
/^([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
摘自2010 年 10 月 1 日的http://fightingforalostcause.net/misc/2006/compare-email-regex.php。
但这当然忽略了国际化。
解决方案 30:
哇,很多答案都包含略有不同的正则表达式。我尝试了很多答案,但都得到了不同的结果,并且都存在各种不同的问题。
对于 UI 验证,我擅长最基本的检查,即查找 @ 符号。需要注意的是,我始终使用标准的“验证电子邮件”进行服务器端验证,其中包含一个供用户确认其电子邮件地址的唯一链接。
if (email.indexOf('@') > 0)
我特意选择了 0,即使从零开始,因为它也能确保 @ 之前有一个字符。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件