。我需要帮助与regExp的电子邮件验证。我一直在这个问题上自作主张。
要求:“电子邮件地址的本地部分和域部分应接受以下内容:
我正在使用jquery验证器进行验证,我得到了正则表达式。
/^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*\.([a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]{2,})$/
有人能缩小这个正则表达式吗?
验证
应该有效: him@g#mail.com
不应该工作: him@g..mail.com
小提琴:http://jsfiddle.net/p6mw3/120/
发布于 2015-09-29 12:47:52
您可以将重复部分声明为构建块,并在构建整个RegExp时进行重用。另外,我将[a-z0-9_]
替换为\w
,因为您还需要支持大写拉丁字母(\w
= [a-z0-9A-Z_]
),并从字符类中删除过多的转义符号。
var rx_block = "[\\w,!#$%&'*+/=?^`{|}~-]"; // <-- REPETITIVE BLOCK
var component = {
input : $('input[name="email"]'),
mensage : {
fields : $('.msg'),
success : $('.success'),
error : $('.error')
}
},
regex = RegExp("^" + rx_block + "+(\\." + rx_block + "+)*@" + rx_block +
"+(\\." + rx_block + "+)*\\.(" + rx_block + "{2,})$"); // <-- BUILD REGEX DYNAMICALLY WITH REGEXP CONSTRUCTOR
component.input.blur(function () {
component.mensage.fields.hide();
regex.test(component.input.val()) ?
component.mensage.success.show() : component.mensage.error.show();
});
.msg {
display: none;
}
.error {
color: red;
}
.success {
color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="email" id="email">Hey!</label>
<input id="email" name="email" type="email" class="required" />
<span class="msg error">You shall not pass!</span>
<span class="msg success">You can pass!</span>
https://stackoverflow.com/questions/32843385
复制相似问题