^1(3[0-9]|5[0-3,5-9]|7[1-3,5-8]|8[0-9])\d{8}$
解释:
^:代表起始,即手机号码只能以1为开头
3[0-9]:代表手机号码第二位可以是3,第三位可以是0-9中任意一个数字
5[0-3,5-9]:代表手机号码第二位也可以是5,第三位是0-3和5-9中的任意一个数字
在这里,以3开头的,以5开头的,以及以8开头的三种情况,我们用“|”来将他们隔开
\d:匹配一个数字字符,等价于 [0-9]
$:终止符,代表不可以再有第12位了
参考:https://www.cnblogs.com/tandaxia/p/4385746.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
参考:https://www.cnblogs.com/whaozl/p/5462865.html
正则三种用法
1.判断数据是否合法--表单提交校验
2.字符串替换--replace
3.字符串截取--match(全局) exec(局部)
<!-- <input type="text" oninput="change(this)"> -->
<textarea name="" id="" cols="30" rows="10" oninput="change(this)"></textarea>
<script>
// 正则使用 判断符合规则 ----replace 替换
// /abc/g 自变量声明 /^1/
// new RegExp(abc) 函数声明 new RegExp(^1) 后台返回匹配规则匹配
// \ 转义字符 *通配符 g全局 i匹配前面
// replace() // 匹配替换 exec 匹配数组(一个匹配 一个不匹配) match 匹配返回的(所有) search
function change(val) {
var value = val.value
// console.log(/^1/.test(value)) // 以什么开头
// console.log(new RegExp('^1').test(value)) // 以什么结尾
//console.log(/3$/.test(value)) // 以什么结尾
// console.log(/1 */.test(value)) //注意空格 0->多次
// console.log(/1+/.test(value)) // 没有空格 1->多次
// console.log(/李太?白/.test(value)) //李白”或者“李太白”
// console.log(/times?/.test(value)) //time或者times
// console.log(/1{2}/.test(value)) // {} 表示几个数连续数
// console.log((value).replace(/1{1,2}/, 'xx')) // m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
// console.log(/1{2,}/.test(value)) // {n,}至少匹配n次
// console.log((value).replace(/1{2,}/i, 'xx')) console.log((value).replace(/1{2,}/g, 'xx'))
// ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的 没有加的都是贪婪模式
// console.log(value.replace(/o+?/, 'sss')) //非贪婪(尽可能少匹配 i) 贪婪(尽可能多匹配 g)
//console.log(/^a{2}.b{2}/.test(value)) // . 代表除了 \n字符以外的任何字符
//console.log(/(1|2){2}/.test(value)) // | 表示或的 1或2 2个
//console.log(/[abc]/.test(value)) // [abc]表示abc其中一个
//console.log(/[^abc]/.test(value)) // [^abc]表示abc中没有一个
//console.log(value.replace(/[^abc]/, 'sss'))
//console.log(/[a-z]/.test(value)) // [a-z]指定范围任意数据
// console.log(/[^1-2]/.test(value)) // [^1-2] 除了1,2以外的所有的数据
//console.log(/\d/.test(value)) // \d 表示匹配[1-9]
//console.log(/^\d/.test(value)) // 开头是 数字
//console.log(/\D/.test(value)) // \D表示匹配 [^1-9]
// console.log(value.replace(/\n/, 'sss')) //表示 \r 回车字符 \n 换行 \s 表示空白字符
// console.log(/\S/.test(value)) // 除了空格以外的
//console.log(/\w/.test(value)) // \w 表示匹配 [A-Za-z0-9_]
//console.log(/\W/.test(value)) //\W 表示匹配非[A-Za-z0-9_]
//console.log(/\b/.test(value)) //\b单词(拼音)匹配 \B汉字进行匹配
//console.log(/\B/.test(value))
//console.log(/^(food)/.test(value)) // ()表示整体匹配
//----------------------------------------------------------------------------------------------------------
// console.log(value.replace(/^(?:foo)/, 'zzz'))
// console.log(value.replace(/^(food)/, 'sss'))
// var m = "abcabc".match(/(?:a)(b)(c)/)
//结果 ["abc", "b", "c"]
// m[0] 是/(?:a)(b)(c)/匹配到的整个字符串,这里包括了a
// m[1] 是捕获组1,即(b)匹配的子字符串substring or sub sequence
// m[2] 是捕获组2,即(c)匹配到的
// var m = "abcabc".match(/(a)(b)(c)/)
//结果 ["abc", "a", "b", "c"]
//console.log(/jack(?=Sprat|aaa)/.test(value)) // x(?=y) 表示匹配后后面跟整体数据 匹配'x'仅仅当'x'后面跟着'y'.这种叫做先行断言。
// console.log(/jack(Sprat|aaa)/.test(value))
// var m = "jackabcabc".match(/jack(?=a)/)
// console.log(m)
//结果 [jack]
// var m = "jackabcabc".match(/jack(a)/)
// console.log(m)
//结果 ["jacka"]
//console.log(/(?<=aaa|bbb)bbb/.test(value))
//var m = 'aaabbb'.match(/(?<=aaa|bbb)bbb/) // (?<= y)x 字符提前的匹配 匹配'x'仅仅当'x'前面是'y'.这种叫做后行断言。
// console.log(m)
// 结果["bbb"]
// var m = 'aaabbb'.match(/(aaa|bbb)bbb/)
// console.log(m)
// ["aaabbb", "aaa"]
// x(?!y)表示匹配后面的 仅仅当'x'后面不跟着'y'时匹配'x',这被称为正向否定查找。(全局匹配 带点数据后面都没匹配 没带点的后面都匹配了)
// let a = "3.1.4";
// let b = /\d+(?!\.)/.test(a);
// console.log(b)
// var m = '3.1.4'.match(/\d+(?!\.)/)
// console.log(m)
// [4]
// var m = '3.1.4'.match(/\d+(\.)/)
// console.log(m)
// [3,.]
// console.log(/(?<!-)\d+/.test(-3))// (?<!y)x 仅仅当'x'前面不是'y'时匹配'x',这被称为反向否定查
// var m = '-6'.match(/(?<!-)\d+/)
// console.log(m)
// [null]
// var m = '-66'.match(/(?<!-)\d+/)
// console.log(m)
// [6]
// (exp) 匹配exp,并捕获文本到自动命名的组里
// (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
// (?:exp) 匹配exp,不捕获匹配的文本
// 位置指定
// (?=exp) 匹配exp前面的位置
// (?<=exp) 匹配exp后面的位置
// (?!exp) 匹配后面跟的不是exp的位置
// (?<!exp) 匹配前面不是exp的位置
// var str = " fee fi fo fum ";
// var myArray = re.exec(/\w+\s/g);
// console.log(myArray);
// match 能匹配的所有数据返回的正则
// var re = /\w+\s/g;
// var str = " fee fi fo fum ";
// var myArray = str.match(re);
// console.log(myArray);
//search 字符串的搜索的索引
// let a = "abcc.daefc";
// let c = a.search(/(.)\1{1,}/)//连续匹配的字符串
// console.log(c);
// console.log(/^[a-zA-Z]{7}$/.test(value)) //长度限制
// console.log(/^[a-zA-Z]{5,7}$/.test(value)) //长度范围
// console.log(/^[a-zA-Z]{5,}$/.test(value)) //最小长度
// 手机号
// console.log(/^1[3456789]\d{9}$/.test(value))
// 用户名
}
</script>
</body>
</html>