一直都是用这个大佬的代码先码上链接 , 我要写带分析的所以要代码的直接点链接跳过去
Java手机号码正则表达式验证_mokeng_zx的博客_java手机号码正则表达式
文尾附上敷衍式前端代码
【代码】
/**
* 手机号码正则 验证手机号码格式
* @param mobile
* @return true 说明格式匹配上了 (具体分析见下文)
*/
public static Boolean isMobile(String mobile) {
String regex = "^((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[56])|(17[0-8])|(18[0-9])|(19[1589]))\\d{8}$";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(mobile);
return m.matches();
}
【分析】
不是最全的用法就写当下用到的
▲正则表达式什么意思
① ^ 以什么开头。 ^1 就是以1开头的意思
$ 以什么结尾。 123$ 就是以123结尾的意思
② | 或 。a|b 意思就是只要是a或者b就会满足要求了
比如 'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
③ \d 数字 0到9都可以。如果是\D那就是除了数字0-9以外的
④ ( ) 就是一部分整体。比如^(123)意思就是必须是123开头
⑤ { }就是几位的意思。
比如\d{8}就是你写8位而且必须是数字
比如[a-z]{3,6}就是你最少写3位最多写6位且必须都是小写字母
⑥ [ ] 字符集合。匹配所包含的任意一个字符。注意只能是一个!
比如, '[abc]' 可以匹配 "plain" 中的 'a'。
比如, 热心市民 : HotShimin[ACG] , 那这个市民就可以是HotShiminA或者HotShiminC或者HotShiminG
注意 , 只能指定一位,不能在一个中括号里指定两位,看下面的电话号码正则解析就懂了↓
【正则解析】
^( (13[0-9]) | (14[579]) | (15([0-3] | [5-9])) | (16[56]) | (17[0-8]) | (18[0-9]) | (19[1589]) ) \\d{8} $
①^() 意思就是必须以这个括号里边的东西开头,至于括号里的是什么
②这里只举例子,后面同理推就懂了
(13[0-9]) 表示一共以这三位开头 : 1 , 3 , 0~9随便挑一个
(14[579]) 同理,表示145,147,149
(15([0-3] | [5-9]))同理,表示1,5,第三位是0-9内除了4以外都可以
所以可以开头的很多情况↑↑不再一一说明
③ \\d{8} 表示要写8位数字
④ $ 表示结尾了
所以一共是 : 前三位指定格式 + 后面8位数字 , 手机号码一共是11位
【代码解析】
①为啥String取名叫regex : 因为regex就是正则表达式的意思
②Pattern类和Matcher类没见过 : 首先中文意思分别是样式(模板) 和 匹配 的意思
如果你要在写Java代码的时候嵌入正则的话就用Pattern和Matcher这两个类
在JDK 1.4中,Java增加了对正则表达式的支持。
java与正则相关的工具主要在java.util.regex包中;此包中主要有两个类:Pattern、Matcher。
下面阐述简单用法三步
①String regex = "把正则表达式写这里面";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
②Pattern类
的构造器私有且自身被final修饰所以是不能new的 , 要通过compile方法来实例化
这一步可以理解为确认好用正则匹配的模板长什么样 + 有什么要求没有(第二个参数)
→当前第二个参数的意思是"启用不区分大小写的匹配" , 还有很多点进去源码看去(文末指路)
→模板长什么样看第一个参数,用String regex = "把正则表达式写这里面";
③Matcher类
就是现在你把你要匹配的东西塞进去看下格式符合不,返回的是boolean,行就true
Matcher m = p.matcher(mobile);
return m.matches(); // 返回boolean值true代表匹配成功
用户不是填了个电话吗,注意要用String mobile不要用数字类型因为万一是固话带杠或者括号
这里还有个例子巩固一下
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
System.out.println(b);// true
---------------------
还没用上的, 用上了我来这里补
① \n 换行符
② \ 单独一个斜杠 : 他本身不能作为一个斜杠, 有意义的,表示将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。
(很复杂的表达总之就是如果你要用反斜杠作为一个字符的话
不能直接写一个反斜杠就算了具体怎么搞看下面)
比如,
① 'n' 匹配字符 "n"。
② '\n' 匹配一个换行符。
③序列 '\\' 就是一个反斜杠
④ "\(" 就是左括号的意思
【拓展】
我们在写用户注册表单的时候,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。
所以上面这图啥意思 : 你可以以字母a到z或者数字0到9还有下划线和横杠开头,然后你这个用户名最短要仨字最长只能15位
前端简易代码参考
如果有优化或者更新我会来这里补并标注更新日期
$(function () {
$('#_js_loginBtn').click(function () {
var val = $('#inputPassword').val();
if (/^1\d{10}$/g.test(val)) {
$.get(domainUrl + "/users/checkPhone", {phone:val}, function (data) {
/*data : 已注册 , 那么 !data : 没有注册*/
if(!data){
$('#inputPassword').next().text('').hide();
$('.login-box').hide();
$('.signup-box').show();
$("#phone").val(val);
}else{
$('#inputPassword').next().text('手机号码已注册.').show()
}
})
} else {
$('#inputPassword').next().text('手机号码格式不正确').show()
}
});
【Pattern和Matcher】
java之Pattern类详解_thlzjfefe的博客_pattern类
【 \\d 的拓展】
正则表达式“\\d+||(\\d+\\.\\d+”是什么意思_百度知道
【正则表达式字符都是什么意思我忘了】