实用的正则表达式的总结

前端之家收集整理的这篇文章主要介绍了实用的正则表达式的总结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们的项目中,经常会用遇到即使要判断用户输入的手机号码,电话号码,邮箱的格式是否正确的情况,以防止存入了错误内容,对用户体验也好,所以熟悉和会使用正则表达式会让我们事半功倍。

@H_502_8@ 说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码

学习正则表达式,必须熟记其中的一些规则,对于一些简单且常用的规则,一定是要熟记的,这样看到复杂的正则表达式,我们就能以不变应万变

常用的规则

1.范围

表达式 说明
\w 任意一个字母或数字或下划线,相当于[a-zA-Z0-9_]
\s 任意空白字符,相当于[ \r\n\f\t\v]
\d 任意一个数字,相当于[0-9],即0~9 中的任意一个
\W \w取反,相当于[^a-zA-Z0-9_]
\S 任意非空白字符,\s取反,相当于[^ \r\n\f\t\v],还有空格
\D 任意一个非数字字符,\d取反,相当于[^0-9]

例如:

\w\s\d”在匹配“Windows 2003”时,匹配成功,匹配的结果为“s 2”。

2.元字符

表达式 说明
- 范围标识符 [a-z]表示匹配a到z的字符
. 匹配除了换行符 \n 以外的任意一个字符
^ 匹配字符串开始的位置,不匹配任何字符
$ 匹配字符串结束的位置,不匹配任何字符
\b 匹配单词边界,不匹配任何字符

例如:

“^a”在匹配“cba”时,匹配失败,因为表达式要求开始位置后面是字符“a”,而“cba”显然是不满足的。

“\d$”在匹配“123”时,匹配成功,匹配结果为“3”,这个表达式要求匹配结尾处的数字,如果结尾处不是数 字,如“123abc”,则是匹配失败的。

3.转义字符

表达式 说明
\r,\n 回车和换行
\\ 匹配“\”本身
\^,\$,\. 分别匹配“^”、“$”和“.”

4.量词

表达式 说明
{m} 表达式匹配m次 “\d{3}”相当于“\d\d\d ”“(abc){2}”相当于“abcabc”
{m,n} 表达式匹配最少m次,最多n次\d{2,3}”可以匹配“12”或“321”等2到3位的数字
表达式至少匹配m次“[a-z]{8,}”表示至少8位以上的字母
* 表达式匹配0次或任意多次,相当于{0,}“<[^>]*>”中“[^>]*”表示0个或任意多个不是“>”的字符
+ 表达式匹配1次或意多次,至少1次,相当于{1,}
? 表达式匹配0次或1次,相当于{0,1}“ab?”可以匹配“a”或“ab”

5.正则里面的括号

表达式 说明
[]

里面内容表示该位置可能出现的字符,

[ab] 相当于该位置可能出现字符"a"或字符"b"

[0-9]表示该位置出现的字符为0到9之间,包含0,9

{} 里面指定匹配字符的数量\d{6}表示匹配6个数字,比如201212
()

表示分组,这里面的内容是一个整体,这个里面是一个子表达式

(ab){2}表示匹配含有abab的字符串

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了。

还有排它型字符组这儿就不详细说了。

原文链接:https://www.f2er.com/regex/360291.html

猜你在找的正则表达式相关文章