需求解读:用正则匹配一串数字,长度为1~13,切为11位时第一位数字为1。
则用于匹配的正则表达式:^(\b[1][0-9]{10}\b)|((\b\d{1,10}\b)|(\b\d{12,13}\b))$。(小生没想到更好的表达式)
直接用在线工具测试的匹配结果如下图(11数字串,但开头为2):
写了一个很简单js测试工具,可自行测试,代码如下:
<html>
<head><title></title></head>
<body>
<br/>
<br/>
<div align='center'>
<input type="input" id="phoneNumber" >
<input type="submit" οnclick="return checkMobilePhone();" value="提交">
</div>
<br/>
<div id="mobileNumberErrorId" style="display:none">
<center>
<font color="#FF0000">请输入正确的电话号码!</font>
</center>
</div>
<script>
function checkMobilePhone(){
var rule = /^(\b[1][0-9]{10}\b)|((\b\d{1,10}\b)|(\b\d{12,13}\b))$/;
var reportorMobile=document.getElementById("phoneNumber").value;
if((reportorMobile !=null && reportorMobile!="")){
if((!(rule.test(reportorMobile))) ){
document.getElementById("mobileNumberErrorId").style.display="";
return false;
}else{
document.getElementById("mobileNumberErrorId").style.display="none";
return true;
}
}else{
document.getElementById("mobileNumberErrorId").style.display="none";
return true;
}
}
</script>
</body>
</html>
正则表达式的一些基础知识:
\d :表示可以匹配一个数字
\w:表示可以匹配一个字母或数字
\b :只用来表示一个开头或结尾的位置
\s:匹配一个空格
. :表示匹配任意字符
* :匹配任意个字符(0个或多个)
+:匹配至少一个字符
?:匹配0个或1个字符
{n}:匹配n个字符
{n,m}:匹配n~m个字符
^:标示行的开头
$:标示行的结尾
[ ]:表示匹配范围内的一个字符
| :A|B可以匹配A或B
所以上面的正则表达式(^(\b[1][0-9]{10}\b)|((\b\d{1,10}\b)|(\b\d{12,13}\b))$)可以这样解释:
\b[1][0-9]{10}\b:匹配以1开头0~9的10个数字共11个数字,
(\b\d{1,10}\b):匹配1~10个数字的字符串
(\b\d{12,13}\b):匹配12~13个数字串
((\b\d{1,10}\b)|(\b\d{12,13}\b)):匹配1~10个数字的字符串或匹配12~13个数字串
(\b[1][0-9]{10}\b)|((\b\d{1,10}\b)|(\b\d{12,13}\b)):匹配以1开头0~9的10个数字共11个数字的字符串或匹配1~10个数字的字符串或匹配12~13个数字串
^和$主要是用于标示正则表达式的,\b在这里的作用是匹配输入的整块内容(电话号中不能输入空格,—等字符,否则不匹配)。