| 修饰符 | 描述 |
|---|---|
| i | 执行对大小写不敏感的匹配。 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
| m | 执行多行匹配。 |
| 表达式 | 描述 |
|---|---|
| [abc] | 查找方括号之间的任何字符。 |
| [^abc] | 查找任何不在方括号之间的字符。 |
| [0-9] | 查找任何从 0 至 9 的数字。 |
| [a-z] | 查找任何从小写 a 到小写 z 的字符。 |
| [A-Z] | 查找任何从大写 A 到大写 Z 的字符。 |
| [A-z] | 查找任何从大写 A 到小写 z 的字符。 |
| [adgk] | 查找给定集合内的任何字符。 |
| [^adgk] | 查找给定集合外的任何字符。 |
| 元字符 | 描述 |
|---|---|
| . | 查找单个字符,除了换行和行结束符。 |
| \w | 查找单词字符。 |
| \W | 查找非单词字符。 |
| \d | 查找数字。 |
| \D | 查找非数字字符。 |
| \s | 查找空白字符。 |
| \S | 查找非空白字符。 |
| \b | 匹配单词边界。 |
| \B | 匹配非单词边界。 |
| \0 | 查找 NULL 字符。 |
| \n | 查找换行符。 |
| \f | 查找换页符。 |
| \r | 查找回车符。 |
| \t | 查找制表符。 |
| \v | 查找垂直制表符。 |
| \xxx | 查找以八进制数 xxx 规定的字符。 |
| \xdd | 查找以十六进制数 dd 规定的字符。 |
| \uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
| 量词 | 描述 |
|---|---|
| n+ | 匹配任何包含至少一个 n 的字符串。例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。 |
| n* | 匹配任何包含零个或多个 n 的字符串。例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。 |
| n? | 匹配任何包含零个或一个 n 的字符串。例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。 |
| n{X} | 匹配包含 X 个 n 的序列的字符串。例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。 |
| n{X,} | X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。 |
| n{X,Y} | X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。 |
| n$ | 匹配任何结尾为 n 的字符串。 |
| ^n | 匹配任何开头为 n 的字符串。 |
| ?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
| ?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
| (?:x) | 匹配 'x' 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。 |
支持正则表达式的String 对象方法
search(返回查询到的字符串的索引下标)、
match(返回数组对象,第一个是检索到的字符串,第二个是索引, 第三个是检测的字符串)、
replace、
split、
如果是先正则的方式来给与的方式,有两个方法:
RegExpObject.test(string) - 检测true 和 false 返回是否匹配上
RegExpObject.exec(string) - 返回的结果跟字符串match 结果是一样的
let phone = '15213497741';
console.log(/^1[345789]\d{9}$/.exec(phone)); // [ '15213497741', index: 0, input: '15213497741' ]
console.log(phone.match(/^1[345789]\d{9}$/)); // [ '15213497741', index: 0, input: '15213497741' ]
console.log(phone.search(/213/)); // 21、 用于校验中间带 · 的外文名字,例如:理查德·泰深
let arr='哔哩哔哩·比例'
console.log(/(^[\u4e00-\u9fa5]+)([·]{1})([\u4e00-\u9fa5]+$)/gi.test(arr));同时校验中文名和外文名:
let arr='哔哩哔哩'
console.log(/(^[\u4e00-\u9fa5]+)([·]{1})([\u4e00-\u9fa5]+$)|^[\u4e00-\u9fa5]+$/gi.test(arr));2、 正则表达式只能输入中文和字母
/^[a-zA-Z\u4e00-\u9fa5]+$/- 手机正则表达式
function checkPhone(){
var phone = document.getElementById('phone').value;
if(!(/^1[345789]\d{9}$/.test(phone))){
alert("手机号码有误,请重填");
return false;
}
}
//有遮罩的手机验证方式
/^1[345789]\d{9}$|^1[345789]\d{1}[*]{4}\d{4}$/4、 限制只能输入规定数字
this.input3 = this.input3.replace(/[^\d]/g, '')5、 限制只允许输入中文字符
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
if(!/^[\u4e00-\u9fa5]+$/gi.test(this.value))alert('含有非汉字字符');6、 银行卡号四位空一位
this.card = newValue.replace(/\D/g,'').replace(/....(?!$)/g,'$& ');7、 普通字符串,每个四位空一位输出
var str = '6222023100014701887';
var str=str.replace(/\s/g,'').replace(/(.{4})/g,"$1 ");
console.log(str);8、邮箱校验
let email ='asdfwef23123@qq.com'
console.log('email', /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(email));9、只能输入数字和英文的校验
/^[a-zA-Z0-9]+$/10、日期正则验证
/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$/11、给某一些位数做掩码规则(替换方式):
let phone = '152132837sfasdf46238746497741';
let phoneMask = phone.replace(/^(\w{3})(\w*)(\w{4})$/, "$1 **** $3");
console.log(phoneMask);12、其他常见正则验证:
//日期规则
exports.dateTimeRule = /^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$/;
//日期规则
exports.dataTimeRuleM = /^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}$/;
//日期规则
exports.dateRule = /^\d{4}-\d{2}-\d{2}$/;
//电话规则
exports.telRule = /^((1[3-9]\d{9})|(\d{3,4}-\d{7,10}))$/;
//邮箱规则
exports.emailRule = /\w@\w*\.\w/;
//邮政编码规则
exports.postCodeRule = /^[1-9][0-9]{5}$/;
//传真规则
exports.faxRule = /^(\d+-)?\d+(-\d+)?$/;
//手机规则
exports.moblieRule = /^1[3-9]\d{9}$/;13、只允许输入小数点和数字:
let input = '1231shfi23.123yanle ';
input = input.replace(/[^(\d|.)]/g, '');
console.log(input);14、JS正则--非负整数或小数,小数最多精确到小数点后两位
/^[0-9]+([.]{1}[0-9]{1,2})?$/15、正则替换的使用
// 正则替换:
var str='this is a test';
var newStr=str.replace(/IS/ig,'!'); //搜索到以后,找到的元素通过!替换
console.log(newStr); //th! ! a test
var str="2015-09-26";
var newStr=str.replace(/(\d{4})-(\d{2})-(\d{2})/,"$2/$3/$1");
console.log(newStr); //结果09-26-2015
var str="2015-09-25";
var newStr=str.replace(/(\d{4})-(\d{2})-(\d{2})/,func);
function func(match,d1,d2,d3){
return [d2,d3,d1].join('/');
}
console.log(newStr); //结果同上//正整数
/^[0-9]*[1-9][0-9]*$/;
//负整数
/^-[0-9]*[1-9][0-9]*$/;
//正浮点数
/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
//负浮点数
/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;
//浮点数
/^(-?\d+)(\.\d+)?$/;
//email地址
/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
//url地址
/^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/;
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
//年/月/日(年-月-日、年.月.日)
/^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/;
//匹配中文字符
/[\u4e00-\u9fa5]/;
//匹配帐号是否合法(字母开头,允许5-10字节,允许字母数字下划线)
/^[a-zA-Z][a-zA-Z0-9_]{4,9}$/;
//匹配空白行的正则表达式
/\n\s*\r/;
//匹配中国邮政编码
/[1-9]\d{5}(?!\d)/;
//匹配身份证
/\d{15}|\d{18}/;
//匹配国内电话号码
/(\d{3}-|\d{4}-)?(\d{8}|\d{7})?/;
//匹配IP地址
/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/;
//匹配首尾空白字符的正则表达式
/^\s*|\s*$/;
//匹配HTML标记的正则表达式
< (\S*?)[^>]*>.*?|< .*? />;
//sql 语句
^(select|drop|delete|create|update|insert).*$
//提取信息中的网络链接
(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
//提取信息中的邮件地址
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
//提取信息中的图片链接
(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
//提取信息中的 IP 地址
(\d+)\.(\d+)\.(\d+)\.(\d+)
//取信息中的中国手机号码
(86)*0*13\d{9}
//提取信息中的中国邮政编码
[1-9]{1}(\d+){5}
//提取信息中的浮点数(即小数)
(-?\d*)\.?\d+
//提取信息中的任何数字
(-?\d*)(\.\d+)?
//电话区号
^0\d{2,3}$
//腾讯 QQ 号
^[1-9]*[1-9][0-9]*$
//帐号(字母开头,允许 5-16 字节,允许字母数字下划线)
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
//中文、英文、数字及下划线
^[\u4e00-\u9fa5_a-zA-Z0-9]+$