我将电子邮件模式简化为/^[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+$/ 以简化方法的步骤。
- 您确定了一种使用模式输入有效值的场景:
值正则表达式匹配
----------------- --------------------------------- -------- ---------
t /^[a-z]+/ 是
到 /^[a-z]+/ 是
汤姆 /^[a-z]+/ 是
汤姆。 /^[a-z]+\./ 是
tom.e /^[a-z]+(\.[a-z]+)*/ 是
tom.ed /^[a-z]+(\.[a-z]+)*/ 是
tom.ed@ /^[a-z]+(\.[a-z]+)*@/ 是
tom.ed@i /^[a-z]+(\.[a-z]+)*@[a-z]+/ 是
tom.ed@in /^[a-z]+(\.[a-z]+)*@[a-z]+/ 是
tom.ed@int /^[a-z]+(\.[a-z]+)*@[a-z]+/ 是
tom.ed@inte /^[a-z]+(\.[a-z]+)*@[a-z]+/ 是
tom.ed@inter /^[a-z]+(\.[a-z]+)*@[a-z]+/ 是
tom.ed@inter。 /^[a-z]+(\.[a-z]+)*@[a-z]+\./ 是
tom.ed@inter.n /^[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+/ 是
tom.ed@inter.ne /^[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+/ 是
tom.ed@inter.net /^[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+$/ 是
-
然后你想办法将只匹配 1 行的模式与前一个模式组合起来。
- 对于
/^[a-z]+\./,我们可以将其与/^[a-z]+/结合,得到/^[a-z]+\.?/。
- 对于
/^[a-z]+(\.*[a-z]+)*@/,我们可以将其与/^[a-z]+(\.*[a-z]+)*/结合,得到/^[a-z]+(\.*[a-z]+)*@?/。
- 对于
/^[a-z]+(\.*[a-z]+)*@[a-z]+\./,我们可以将其与/^[a-z]+(\.*[a-z]+)*@[a-z]+/结合,得到/^[a-z]+(\.*[a-z]+)*@[a-z]+\.?/。
- ...
您继续,直到您对已涵盖所有可能的情况感到满意为止。
- 您使用此
/^( ... | ... | ... | ... )/ 将所有内容放在一起。您可以在这里获得一个可能的正则表达式:
/^([a-z]+\.?|[a-z]+(\.[a-z]+)*\.?|[a-z]+(\.[a-z]+)*@|[a-z]+(\.[a-z]+)*@[a-z]+\.?|[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)*\.?|[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+)$/
她的视野更好:
( [a-z]+\.?
| [a-z]+(\.[a-z]+)*\.?
| [a-z]+(\.[a-z]+)*@
| [a-z]+(\.[a-z]+)*@[a-z]+\.?
| [a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)*\.?
| [a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+ )
- 最后你测试看看它是否允许不需要的值
您可以在regex101.com 或测试页面中执行此操作。
注意:此模式仅在用户输入值时有效。在提交之前,必须使用原始模式 (/^[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+$/) 来验证值,以便不会将不完整的值发送到服务器。
编辑:
为了使其更具可读性和可维护性,您可以这样做
var patt1 = "[a-z]+\.?";
var patt2 = "[a-z]+(\.[a-z]+)*@";
var patt3 = "[a-z]+(\.[a-z]+)*@[a-z]+\.?";
var patt4 = "[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)*\.?";
var patt5 = "[a-z]+(\.[a-z]+)*@[a-z]+(\.[a-z]+)+";
var keypressedValidator = new RegExp("^("+patt1+"|"+"+patt2+"|"+"+patt3+"|"+"+patt4+"|"+"+patt5+")$");
...
var inputValue = document.getElementById(...some Id...).value;
if ( ! inputValue.match(keypressedValidator)) {
... show error status or error message ...
...