最近写JavaScript和PHP都经常碰到写正则表达式的情况,同学你该复习正则表达式了。

热身

一个正则表达式的简单题目:
驼峰式和连字符式的转换
很多人可能会用很丑陋的遍历来解决.

遍历

1
2
3
4
5
6
7
var s = "style-sheet-base";

var a = s.split("-");
var o = a[0];
for(var i=1;i<a.length;i++){
o = o + a[i].slice(0,1).toUpperCase() + a[i].slice(1);
}

但是,如果使用正则表达式其实,代码非常整洁(《代码简洁之道》)

1.驼峰转连字符:

1
2
var s = "fooStyleCss";
s = s.replace(/([A-Z])/g,"-$1").toLowerCase();

2.转驼峰

1
2
3
4
var s1 = "foo-style-css";
s1 = s1.replace(//-(/w)/g, function(all, letter){
return letter.toUpperCase();
});

一些常用的正则表达式验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
整数或者小数:`^[0-9]+\.{0,1}[0-9]{0,2}$`
只能输入数字:`"^[0-9]*$"`。
只能输入n位的数字:`"^\d{n}$"`。
只能输入至少n位的数字:`"^\d{n,}$"`。
只能输入m~n位的数字:`"^\d{m,n}$"`
只能输入零和非零开头的数字:`"^(0|[1-9][0-9]*)$"`。
只能输入有两位小数的正实数:`"^[0-9]+(.[0-9]{2})?$"`。
只能输入有1~3位小数的正实数:`"^[0-9]+(.[0-9]{1,3})?$`"。
只能输入非零的正整数:`"^\+?[1-9][0-9]*$"`。
只能输入非零的负整数:`"^\-[1-9][]0-9"*$`。
只能输入长度为3的字符:`"^.{3}$"`。
只能输入由26个英文字母组成的字符串:`"^[A-Za-z]+$"`。
只能输入由26个大写英文字母组成的字符串:`"^[A-Z]+$"`。
只能输入由26个小写英文字母组成的字符串:`"^[a-z]+$"`。
只能输入由数字和26个英文字母组成的字符串:`"^[A-Za-z0-9]+$"`。
只能输入由数字、26个英文字母或者下划线组成的字符串:`"^\w+$"`。
验证用户密码:`"^[a-zA-Z]\w{5,17}$"` 正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有**^%&',;=?$\"**等字符:`"[^%&',;=?$\x22]+"`。
只能输入汉字:`"^[\u4e00-\u9fa5]{0,}$"`
验证Email地址:`"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"`。
验证InternetURL:`"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"`。
验证电话号码:`"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"`正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):`"^\d{15}|\d{18}$`。
验证一年的12个月:`"^(0?[1-9]|1[0-2])$"`正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:`"^((0?[1-9])|((1|2)[0-9])|30|31)$"`正确格式为;"01"~"09"和"1"~"31"。 匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):`[^\x00-\xff]`

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}

匹配空行的正则表达式:`\n[\s| ]*\r`

匹配html标签的正则表达式:`<(.*)>(.*)<\/(.*)>|<(.*)\/>`

匹配首尾空格的正则表达式:`(^\s*)|(\s*$)`