。我需要帮助regExp进行电子邮件验证。我在这个问题上遇到了困难。
要求是: “电子邮件地址的本地部分和域名部分应接受以下内容:
大写和小写拉丁字母(a-z,A-Z)
数字0到9
这些特殊字符:# - _~! $& '* + =和百分位编码即%20
字符。 (点,句号,句号),前提是它不是第一个或最后一个字符,并且也表示它不会连续出现(例如John..Doe @ example.com不允许)。“
我正在验证使用jquery验证器 我得到了反对的表达
/^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*\.([a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]{2,})$/
有人可以缩小这个正则表达式
验证
应该有效: him@g#mail.com
不应该工作:他@ g..mail.com
答案 0 :(得分:0)
您可以将重复部分声明为构建块,并在构造整个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>