我的最终正则表达式(更新):
^[A-z0-9]*([\.]?\w*)*[A-z0-9]+@[A-Za-z0-9]([\.]?\w+)+\.[A-Za-z][A-Za-z][A-Za-z]$
第一个问题
我知道方括号[]
用于字符集/类,但我不明白为什么它不需要右括号,并导致我的 Reg-ex 行为怪异。例如这里原来是
[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-Za-z0-9][\.?[A-Za-z0-9+]+\.[A-Za-z][A-Za-z][A-Za-z]
Matches ----> reg.ex.email@gmail.com
请注意,在第二个[
之前的第二个\.
以及在第二个之前的第六[
个\.
这两个没有任何右括号。我也知道 ? 表示零个或前面的元素之一。当我删除括号9]*\.?[\w
时,正则表达式不会识别reg.
字符串的一部分。我也尝试添加右括号[\.?[\w+]]
, [\.?][\w+]
,但它也会导致相同的行为,请注意第一个[\.?[\w+]]
导致它根本无法识别字符串。任何人都可以帮助解释这种行为吗?
第二个问题
基于上述正则表达式,我使用 JavaScript 正则表达式来测试我的字符串。而且我不知道为什么测试通过了,即使只有部分字符串通过了测试。我的一些测试用例
reg@asld@fja.com
reg.exp.email@gmial@gmail.com
reg.exp.email@gm@il.com
reg.exp.themail@gmail.com
我应该澄清只reg.exp.themail@gmail.com
应该通过
如果您访问此站点并通过我的正则表达式和测试字符串,您就会明白我的意思。在我的 javascript 我有这个
var inputVal = $(this).val();
var re = /[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-Za-z0-9][\.?[A-Za-z0-9+]+\.[A-Za-z][A-Za-z][A-Za-z]/;
if (!re.test(inputVal)) {
$("#emailValidate").css({"display": "inline-block", "color":"red","margin-top":"4px"});
} else {
$("#emailValidate").css("display", "none");
}
上面的测试用例通过了。对这个有任何想法吗?