正则表达式案例

十二、案例

1、匹配手机号格式是否正确

1
2
3
4
5
6
7
8
9
10
11
/*
手机号特点:
11位
纯数字
1开头
2 3位判断[可选,去各大运营商查询]
*/
var tel = '13066668888';
var reg = /^1\d{10}$/g;
var result = reg.test(tel);
console.log(result); //true

匹配成功,返回true;失败返回false

2、匹配邮箱格式是否正确

邮箱的格式:

1、 必须有 @
2、 必须有 . 符号
3、 必须有域名后缀,如(com / cn/ org / com.cn)
4、 @前面的邮箱名,要求4~16位,可以是小写字母,数字,下划线组合,下划线不能在收尾(新浪要求)

1
2
3
4
5
6
7
$email = "qw3a_sdf@xx.com.cn";
// ^[a-z0-9] : 限制首个字符的范围
// [a-z0-9] : 末尾的这个限制最后一个字符的范围,即 下划线不能在收尾
// \w+ : 结果如, xx
// \.\w+ : 结果如, .com
// (\.\w+)+ : 括号里的作为一个来匹配,结果如, .com.cn
echo preg_match('/^[a-z0-9][a-z0-9_]{2,14}[a-z0-9]@\w+(\.\w+)+$/', $email);

3、解决结巴程序(去重复)

把“今今今天晚晚晚晚晚晚上吃吃吃吃吃吃鸡”字符串换成单字的形式,即“今天晚上吃鸡”;

1
2
3
4
var str = "今今今天晚晚晚晚晚晚上吃吃吃吃吃吃鸡";
//var reslut = str.replace(/([\u4e00-\u9fa5])\1+/g, "$1"); //只替换匹配的今、晚、吃
var reslut = str.replace(/([\u4e00-\u9fa5])\1*/g, "$1");//全部字符都替换
console.log(reslut);

4、用户名验证

注册的时候,要求用户名:长度4~10位,不能是纯数字,不能是纯字母,不能有特殊符号,不能以数字打头。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 长度4~10位
// 不能以数字打头
// 不能有特殊符号
// 不能是纯数字
// 不能是纯字母

var username = "aaaaa4";

// 1,首个字符范围为 ^[a-zA-Z] 如下非()中,符合 不能以数字打头
// 2,剩余的字符范围为 [0-9a-zA-Z] ,需要的数量为 {3,9} ,控制结尾用 $
// 1和2 为一个整体,符合了 不能有特殊符号,长度4~10位,不能是纯数字(因为开头那个不包含数字)
// 3、(?!^[a-zA-Z]+$) :此为过滤条件或排除条件,表示开头到结尾都是字母的一个整体排除掉
// 3符合了 不能是纯字母
var result = username.match(/(?!^[a-zA-Z]+$)^[a-zA-Z][0-9a-zA-Z]{3,9}$/g);
if(result){
//如果匹配,说明username符合要求
console.log('用户名可用');
}else{
//如果result为null,表示不符合要求
console.log('有问题');
}