实用的正则表达式的总结
我们的项目中,经常会用遇到即使要判断用户输入的手机号码,电话号码,邮箱的格式是否正确的情况,以防止存入了错误的内容,对用户体验也好,所以熟悉和会使用正则表达式会让我们事半功倍。 说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 学习正则表达式,必须熟记其中的一些规则,对于一些简单且常用的规则,一定是要熟记的,这样看到复杂的正则表达式,我们就能以不变应万变。 常用的规则 1.范围
例如: “wsd”在匹配“Windows 2003”时,匹配成功,匹配的结果为“s 2”。 2.元字符
例如:
“^a”在匹配“cba”时,匹配失败,因为表达式要求开始位置后面是字符“a”,而“cba”显然是不满足的。 “d$”在匹配“123”时,匹配成功,匹配结果为“3”,这个表达式要求匹配结尾处的数字,如果结尾处不是数 字,如“123abc”,则是匹配失败的。 3.转义字符
4.量词
5.正则里面的括号
6 .分支结构 当一个字符串的某一子串具有多种可能时,采用分支结构来匹配,“|”表示多个子表达式之间“或”的关系,“|”是以()限定范围的,如果在“|”的左右两侧没有()来限定范围,那么它的作用范围即为“|”左右两侧整体。
举例: “^aa|b$”在匹配“cccb”时,是可以匹配成功的,匹配的结果是“b”,因为这个表达式表示匹配“^aa”或“b$”,而“b$”在匹配“cccb ”时是可以匹配成功的。 “^(aa|b)$”在区配“cccb”时,是匹配失败的,因为这个表达式表示在“开始”和“结束”位置之间只能是“aa”或“b”,而“cccb”显然是不满足的 在我们熟悉一些基本的正则表达式的语法之后,我们就可以来看大量的例子,来有助于我们理解上面的规则: 例1: 身份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后一位为数字或者大写字母”X“。 与之匹配的正则表达式:(^d{15}$)|(^d{17}([0-9]|X)$) 例2: 字符组中的 - ,如果它紧邻着字符组中的开方括号 [ ,那么它就是普通字符,其他情况下都是元字符 [-09]表示包含三个字符-、0、9的字符组; 而[0-9]是包含0~9这10个字符的字符组。
例3: 手机号码的正则表达代码: 我们知道手机号码,座机拨打长途电话的时候会加一个0开头,比如013277667717,还有以+86开头,+86是中国大陆的国际区号。在我们收到短信的时候,显示的号码就是+86开头,比如+8613277667717,当然也可以没有前面的开头,直接手机号码,手机号一般13开头,15开头还有18开头的11位数字。 之前看到网上有一版是这样的
(0|+86)?(13[0-9]|15[0-356]|18[025-9])d{8}; 这是错的,分段的给解释一下: 1.(0|+86)?他表示以0开头或者以+86开头,或者没有这些开头, 2.13[0-9]|15[0-356]|18[025-9] 表示以13开头的第三位可以为0-9,这是对的,但是后面他表示或者以15开头,第三位只能是0到3或5或6,但是我的手机上有157,158,之类开头的手机号码,所以这个是错的。 还有以18开头后面他限制在0、2、5到9,但是我的手机上有181开头的,183开头之类 所以后来我改进如下: (0|+86)?(1[358])d{9} 然后我运用到js中去,代码如下 <html> <script> vars="15923520231"; varreg=/(0|+86)?(1[359])d{9}/; varss=reg.test(s); alert(ss); </script> </html> 上面的代码运行之后为true是对的,但是你输入如下: vars="a15923520231a" 运行也是对的,因为我们只是让其匹配字符串中有符合手机格式的数字字符串而已,没有限定其字符串的开头和结尾,这时候就运用的^和$ 最后js代码变为: <html> <script> vars="15923520231"; varreg=/^(0|+86)?(1[359])d{9}$/;开头只能以0或+86或13,15,18开头,结尾只能是9为数字 varss=reg.test(s); alert(ss); </script> </html> 例4,座机号码的匹配 在我们这个项目中只限定了为:国际区号-国内区号-号码, 且国际区号的长度不能大于4,国内区号的长度不能大于4,号码的长度不能长于16,所以正则表达式如下: <html> <script> vars="086-021-2312344"; varreg=/d{0,4}-d{0,16}/; varss=reg.test(s); alert(ss); </script> </html> 但是你会发现有错误,输入如下的也是正确的 vars="12a-021-8989923a" 所以没有限定开头的为数字,结尾为数字,但是我有一个疑问中间的我也没有限定,结果只能输入数字,估计是两个--中间限定死了,只能为数字。 做好变为: varreg=/^d{0,16}$/; 这样就ok了。 还有排它型字符组这儿就不详细说了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |