PHP正则表达式验证手机号码
在开发web应用时经常需要对手机号码进行验证,应用程序需要判断给出的手机号码是否满足一定的格式和规则,常用的实现方法是使用正则表达式匹配。本文讲解如何使用PHP中的正则表达式进行手机号码验证。
正则表达式
正则表达式是一种使用单个字符串来描述、匹配一系列符合某个句法规则的字符串的方法。PHP中的正则表达式函数主要包括下面几种:
- preg_match()匹配成功返回1,否则返回0
- preg_match_all()用于匹配所有符合正则表达式的字符串
- preg_replace()正则匹配后进行替换
- preg_filter()与preg_replace()功能类似,不同之处是它返回的是替换后的数组
下表列出了常用的正则表达式的符号:
符号 | 含义 |
---|---|
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
. | 匹配除换行符\n 之外的任何字符 |
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{n} | 匹配确定的n次 |
{n,} | 匹配至少n次 |
{n,m} | 匹配至少n次,但不超过m次 |
其中,字符集[]表示将括号内的任意一个字符匹配成功。比如,[abc]表示匹配任意一个字符a、b或者c。
手机号码验证
下面,我们将讨论如何使用正则表达式验证手机号码。
手机号码格式
一个完整的中国手机号码由11位数字组成,如下面几种:
13712345678
15012345678
18912345678
第一位必须是1,第二位可以是3、4、5、7、8之中的任意一个数字。因为手机号码通常不带区号、国家号,所以不能以0开头。
正则表达式验证
使用正则表达式验证手机号码的过程就是先定义需要匹配的正则表达式,然后再使用PHP的preg_match()函数进行匹配。
在本例中,需要匹配的正则表达式为/^1[34578]\d{9}/,其中/^1[34578]\d{9}/表示从字符串开始位置匹配以1开头,第二位是3、4、5、7、8之中的任一数字,后面跟着任意9个数字,由此可以得到如下示例代码:
$phone = '18912345678';
$pattern = '/^1[34578]\d{9}$/';
if(preg_match($pattern, $phone)){
echo 'Valid phone number';
}else{
echo 'Invalid phone number';
}
结论
PHP中使用正则表达式可以轻松地进行手机号码验证。在匹配正则表达式的时候,需要注意验证的正则表达式的正确性,以及要验证的字符串的格式和规则。