/正则表达式主体/修饰符(可选)
1.修饰符:
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
2.特殊符号元字符:
. 表示匹配任意单个字符(除了换行符)
\d 任意数字 ,\d{9}:表示后面紧跟着9个任意数字,
\s 空⽩字符
\b 单词边界
^ 行开始
$ 行结尾
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
3.区间表达式
[1] 表示第一个数字必须是1
[0-9] 从0到9的任意数字
[a-z] 从a到z的任意⼀个⼩写字⺟
[A-Z] 从A到Z的任意⼀个⼤写字⺟
[\dX]:匹配最后一个字符是数字或者大写字母 X
[a-zA-Z]任意⼀个大小写字⺟
[a-zA-Z0-9] 或 [0-9a-zA-Z] 任意大小写字⺟和数字
{ n } 重复n次 , \d{9}:表示后面紧跟着9个任意数字
(.{n}) 表示匹配前 n 个字符表示匹配前 n 个字符
{1 ,} 重复1次或更多次
{n,m} 重复n到m次,{2,6}匹配长度为2到6
4.量词
? 表示零次或一次
* 表示零次或多次
+ 表示至少一次或多次
search()
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
var str = 'xiao hong'
var n = str.search(/h/i)
console.log(n) //返回索引:5
replace()
replace() 方法用于在字符串中用一些字符串替换另一些字符串,或替换一个与正则表达式匹配的子串。
var str = 'xiao hong'
var txt = str.replace(/hong/i, 'ming')
console.log(txt) // xiao ming
test() 方法是一个正则表达式方法,用于检测一个字符串是否匹配某个模式
var patt1 = new RegExp("e");
console.log(patt1.test("hello")); //true
exec() 方法是一个正则表达式方法,用于检索字符串中的正则表达式的匹配。
var patt2 = new RegExp("e");
console.log(patt2.exec("hello"));
//[ 'e', index: 1, input: 'hello', groups: undefined ]
案例1:
{{ name.replace(/[^\u4e00-\u9fa5]/g, '') }}
[] 表示一个字符集合,它匹配方括号内的任何一个字符。
^ 在字符集合内部使用表示否定,即匹配除了后面指定字符之外的任何字符。
\u4e00-\u9fa5 是Unicode编码范围,包括了所有常用的中文汉字
案例2:
请输入有效的手机号
phoneNumber: '',
phoneError: false,
validatePhone() {
const reg = /^[1][3-9]\d{9}$/
if (!reg.test(this.phoneNumber)) {
this.phoneError = true
} else {
this.phoneError = false
}
},
^:表示匹配输入的开始位置。
[1]:表示第一个数字必须是1,因为中国大陆的手机号都是以1开头。
[3-9]:表示第二个数字可以是3到9之间的任意一个数字,
\d{9}:表示后面紧跟着9个数字。\d表示匹配任意一个数字,{9}表示重复匹配9次,所以这部分可以匹配接下来的9位数字。
$:表示匹配输入的结束位置。
案例3:
邮箱验证: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/
^:表示匹配输入的开始位置。
[a-zA-Z0-9._-]+:表示匹配由大小写字母、数字、点(.)、下划线(_)或短横线(-)组成的字符串,且至少包含一个字符。
@:表示匹配邮箱地址中的@符号。
[a-zA-Z0-9.-]+:表示匹配由大小写字母、数字、点(.)或短横线(-)组成的字符串,且至少包含一个字符。
\.:表示匹配邮箱地址中的点号,并使用反斜杠进行转义,
[a-zA-Z]{2,6}:表示匹配长度为2到6的大小写字母组成的字符串,通常用来匹配邮箱地址的顶级域名,如com、org等。
案例4:
加密身份证号: 得到xxxxxx********xxxx
{{certNo.replace(/^(.{6})(.*)(.{4})$/,'$1' + '*'.repeat(certNo.length - 10) + '$3',)}}
certNo.replace
:这是一个字符串的替换操作,其中certNo
是待处理的原始身份证号码。
/^(.{6})(.*)(.{4})$/
:这部分是正则表达式,它匹配一个特定格式的字符串。具体来说:
^
表示匹配输入的开始位置。(.{6})
匹配任意六个字符,并将其作为第一个捕获组。(.*)
匹配任意数量的字符(可能是零个),并将其作为第二个捕获组。(.{4})
匹配任意四个字符,并将其作为第三个捕获组。$
表示匹配输入的结束位置。
'$1' + '*'.repeat(certNo.length - 10) + '$3'
:这部分是替换的内容。它由三部分组成:
$1
表示第一个捕获组匹配到的内容。'*'.repeat(certNo.length - 10)
使用""重复若干次,以替换第二个捕获组匹配到的内容。certNo.length - 10
表示要用""替换的字符数量,这里是身份证号码总长度减去固定的6和4个字符。$3
表示第三个捕获组匹配到的内容。
案例5:
身份证号码验证 :/^\d{17}[\dX]$/ 匹配一个包含17位数字和最后一位数字或大写字母 X 的字符串
function validateIDNumber(idNumber) {
// 正则表达式匹配身份证号码的基本结构
var idPattern = /^\d{17}[\dX]$/;
if (!idPattern.test(idNumber)) {
return false; // 如果不符合基本结构,直接返回false
}
// 提取出生日信息
var year = idNumber.substring(6, 10);
var month = idNumber.substring(10, 12);
var day = idNumber.substring(12, 14);
var birthday = new Date(year, parseInt(month, 10) - 1, day);
// 检查生日是否合法
if (
birthday.getFullYear() != year ||
birthday.getMonth() + 1 != month ||
birthday.getDate() != day
) {
return false;
}
// 校验码校验
var idArray = idNumber.split("");
var factorArr = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var checkCodeArr = [
"1",
"0",
"X",
"9",
"8",
"7",
"6",
"5",
"4",
"3",
"2"
];
var checkSum = 0;
for (var i = 0; i < 17; i++) {
checkSum += parseInt(idArray[i]) * factorArr[i];
}
if (idArray[17].toUpperCase() != checkCodeArr[checkSum % 11]) {
return false;
}
return true; // 如果通过了以上所有检验,返回true
}
// 使用例子:
var idNumber = "320125199001011234";
console.log(validateIDNumber(idNumber)); // 输出 true 或 false
^:匹配输入的开始位置。
\d{17}:匹配包含17个数字的字符串。\d表示匹配任意数字,{17}表示前面的数字必须连续出现17次。
[\dX]:匹配最后一个字符是数字或者大写字母 X。
$:匹配输入的结束位置。