最近写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*$)`
|