最近在学习JS正则表达式,个人感觉比较抽象,而在一些地方使用频率又比较高,因此整理了一些在某些场景下正则表达式的写法。废话不多说。
图片来源于网络
匹配结尾的数字
用正则表达式取出字符串最后一组数字, 如
30CAC0040 取出40
3SFASDF92 取出92
正则如下://d+$/g
判断字符串是不是由数字组成
正则如下:/^/d*$/;
电话号码正则
验证电话号码的JS正则判断
正则如下:/^/d{3,4}-/d{7,8}(-/d{3,4})?$/
区号必填为3-4位的数字,区号之后用“-”与电话号码连接
^/d{3,4}-
电话号码为7-8位的数字
/d{7,8}
分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接
(-/d{3,4})?
手机号码正则表达式
正则验证手机号,忽略前面的0,支持130-139,150-159,170-179,180-189。忽略前面0之后判断它是11位的。
正则如下:/^0*(13|15|17|18)/d{9}$/
^0*匹配掉开头任意数量的0。
由于手机号码是13任意数字9位,和15任意数字9位,所以可以用(13|15)/d{9}匹配。
用正则表达式实现删除字符串中的空格:
//删除字符串两侧的空白字符。
function trim(str){
return str.replace(/^/s+|/s+$/g,'');
}
//删除字符串左侧的空白字符。
function ltrim(str){
return str.replace(/^/s+/g,'');
}
//删除字符串右侧的空白字符。
function rtrim(str){
return str.replace(//s+$/g,'');
}
限制文本框只能输入数字和小数点等等
只能输入数字和小数点
正则如下: /^/d*/.?/d{0,2}$/
开头有若干个数字,中间有0个或者一个小数点,结尾有0到2个数字。
只能输入小写的英文字母和小数点,和冒号,正反斜杠(:.//)
正则如下/[a-z/.////:]+/;
a-z包括了小写的英文字母,/.是小数点,//和//分别是左右反斜线,最后是冒号。整个组成一个字符集和代码任 一均可,最后在加上+,1或者多个。
替换小数点前内容为指定内容
把字符串的小数点前面的字符替换为自定义的字符串
例如:infomarket.php?id=197 替换为test.php?id=197
把第一个点“.”之前的所有单词字符替换为test就可以了。
正则如下:
<script type="text/javascript">
var str = "infomarket.php?id=197";
var reg = /^/w*/ig;
//匹配字符串开头的任意个单词字符
str = str.replace(reg,'test');
document.write(str);
匹配<ul>与<ul>之间的内容
例子如下:
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>
用正则可以得到<ul>起到下个<ul> 之间的内容。
正则如下:
/<ul>[/s/S]+?<ul>/i
首先匹配两侧的ul标签,中间的[/s/S]+?可以匹配一个或者多个任意字符,一定要非贪婪,否则会匹配 <ul>safsf<ul>safsf</ul><ul>。注意如果想匹配其他标签里的内容,把ul替换就行。
用正则表达式获得文件名
如:c:/images/tupian/006.jpg 可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。
正则如下:
/[^////]*[////]+/g
首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。形如“xxx/”或者“xxx/”或者“/”或 者“/” 。
用户名正则
用于用户名注册,,用户名只能用中文、英文、数字、下划线、4-16个字符。
正则如下: /^[
/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/
身份证号码的匹配
身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字,正则如下:
/^(/d{14}|/d{17})(/d|[xX])$/
开头是14位或者17位数字,结尾可以是数字或者是x或者是X。
单词首字母大写
每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea
正则如下:
//b(/w)|/s(/w)/g
所谓“首字母”包括两种情况:第一种是边界(开头)的单词字符,一种是空格之后的新单词的第一个字母。
正则验证日期格式
yyyy-mm-dd格式的正则
正则如下:
/^/d{4}-/d{1,2}-/d{1,2}$/
4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。
第二种格式:.yyyy/mm/dd
用“或”简单地修改一下就行了。
/^/d{4}(-|//)/d{1,2}(-|//)/d{1,2}$/
去掉文件的后缀名
如:www.abc.com/dc/fda.asp变为www.abc.com/dc/fda。
如果文件后缀已知的话这个问题就非常简单了,正则如下:
//.asp$/
匹配最后的.asp而已
验证邮箱的正则表达式
正则如下:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/
开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者多个组合。
正则判断标签是否闭合
例如:<img xxx=”xxx” 就是没有闭合的标签;
<p>p的内容,同样也是没闭合的标签。
从简单的正则开始,先匹配起始标签
/<[a-z]+/i
再加上若干属性:
/<[a-z]+(/s*/w*?/s*=/s*".+?")*/i
下面就到关键点了,标签的闭合。标签可能有两种方式闭合,<img xxx=”xxx” />
或者是<p>xxx </p>。
(/s*//>)
匹配img类的结束,即/>。
(/s*?>[/s/S]*?<///1>)
匹配/p类标签的结束标签。>是其实标签末尾,之后是标签内容若干个任意字符,最后的<///1>就是
结束标签了。 加上一个或就可以解决了,最后的完整正则表达式:
整个正则:/<([a-z]+)(/s*/w*?/s*=/s*".+?")*(/s*?>[/s/S]*?<///1>|/s*//>)/i
拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例如
<div>aaaaaa<div>test</div>
也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在
匹配结果中检查是否成对。正则如下:
/<([a-z]+)(/s*/w*?/s*=/s*".+?")*(/s*?>[/s/S]*?(<///1>)+|/s*//>)/i
正则判断是否为数字与字母的混合
不能小于12位,且必须为字母和数字的混合。
验证字符串包含数字简单,验证字符串包含字母也简单,验证字符串不包含其它字符也简单,可以用这三个正则 分别检查一次字符串,逻辑运算出最终结果。
下面是正则:
/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig
思路非常的清晰:
[a-z]+(?=[0-9])
字母开头,后面必须紧跟着数字。
[0-9]+(?=[a-z]
数字开头,后面必须紧跟着字母。
[a-z0-9]+
后面的字符只要是数字或者字母就可以了。
空格与英文同时存在
匹配英文以及空格,要求必须既有英文字母又有空格。
这个思路和上面的差不多,只要把数字改成空格就可以了。正则如下:
/^(([a-z]+/s+)|(/s+[a-z]+))[a-z/s]*$/i
英文开头加空格,或者是空格开头加英文,后面可以是英文或者空格。
编程语言大都有相同之处,正则中java与JS的不同就在于java使用“”双引号表达正则规则,如第十四个 //.asp$/ 把两边的//双斜扛替换为“”,写成的正则就成为".asp$"。