
2.3 用正则来校验复杂的格式要求
在职场里流行一句话:用户总是对的,老板也是对的。
前面的代码运行没多久,老板就提出:加上电子邮件吧!于是我们就得接触已有40多岁的大妹子——“伊妹儿”了,当然大多数时候和“伊妹儿”打交道的也是有50多岁的正则老大哥。
2.3.1 认识JavaScript正则
正则,也称正则表达式,也叫正则表示法。最早见于1956年斯蒂芬·科尔·克莱尼(Stephen Cole Kleene)发表的论文《神经网事件的表示法》。该论文利用称为正则集合的数学符号描述神经网事件模型,而且他的递归论研究奠定了理论计算机科学的基础,他也被称为正则表达式之父。
之后一段时间,UNIX之父肯·汤普逊(Kenneth Lane Thompson)将其引入UNIX编辑器中,自此以后,正则表达式被广泛地应用到各种UNIX或类似于UNIX的工具中,如大家熟知的Perl。
如今,只要是计算机编程语言就必然会有正则表达式的身影。
正则确实是公认的难学但非常有用的工具。著名的NoSQL数据库MongoDB不是靠SQL语句来搜索数据而是用正则来搜索,这正说明其价值。
2.3.2 JavaScript正则符号及其说明
因为其强大而复杂,市面上也有很多专门介绍正则的书籍,读者可根据自己情况去选择阅读,也可以上网自行搜索资料。表2-1列出了常见的正则表达式符号并简要说明了其用法,以备查阅。
表2-1 正则表达式常见符号及说明

(续表)

(续表)

2.3.3 正则验证输入邮箱
在【范例2-6】的22行后面增加如下代码让用户输入邮箱:
邮箱:<input type="text" name="" id="email" /><br /><br />
在【范例2-6】的78行“return true; ”前增加如下代码来验证邮箱:
//邮箱验证 var email = eg.$("email"); if(! /^[A-Za-z\d]+[A-Za-z\d\-_\.]*@([A-Za-z\d]+[A-Za-z\d\-]*\.)+[A-Za-z] {2,4}$/.test(email.value)){ alert(’请输入正确的邮箱!'); eg.err(); return false; }
上面的if判断中用了符号方式来声明RegExp正则对象,如果要换成下面这样也是可以的:
if(! new RegExp("^[a-z\\d]+[\\w\\-\.]*@([a-z\\d]+[a-z\\d\\-]*\.)+[a-z]{2,4} $", "i").test(email.value)){
可以看到少了A~Z这样的字符,"\\"是转义"\"的意思,同时RegExp多传递了一个参数i,意思是忽略字母的大小写。
简要解释一下这个正则表达的意思:
● ^[A-Za-z\d]+和^[a-z\\d]+是以字母或数字开头。
● [A-Za-z\d\-_\.]*和[\\w\\-\.]*是允许字母、数字、下划线、中横线和点出现0次以上。
● ([A-Za-z\d]+[A-Za-z\d\-]*\.)+和([a-z\\d]+[a-z\\d\\-]*\.)+是以字母开头接着只允许字母、数字、中横线和点为一组,可以出现1次以上,即匹配域名163.com中的163.这部分。
● [A-Za-z]{2,4}$和[A-Za-z]{2,4}$是以字母结尾长度为2~4个字母。