这里写目录标题
正则表达式原理及方法:
只能匹配字符串
规则:让计算机去认识的规则
规则语法:
var reg = / /;
var reg = new RegExp();
test:匹配成功返回true,否则返回false;
语法:
var str = 'abcd'; 定义字符串
var reg = /a/; 定义规则
reg.test(str); 通过test方法去找字符串里面有没有a,它查找的是一个整体。
search:匹配成功返回匹配字符的位置下标,否则返回 - 1;查找
语法:
var str = ‘abcd';
var reg = /c/i;
reg.search(str);
标识:
i:不区分大小写(默认区分);
match:匹配成功返回匹配字符的数组,否则返回null;匹配
正则中默认匹配成功以后就结束了;
标识:
g: 从头到尾匹配完所有字符后就结束;
量词:
+: >=1 , 许多的意思
语法:
var str = 'adfesaf74arda5faradfa5';
var reg = /\d+/g;
alert( reg.match(str) );
----eg----
1.匹配?开始或=或& 全局g
'?key1=1&key2=2&key3=3#test'.match(/([^?=&]+)/g)
['', 'key1', '1', 'key2', '2', 'key3', '3#test']
2.左边满足 匹配?开始或=或& 全局g 右边满足 =开始
'?key1=1&key2=2&key3=3#test'.match(/([^?=&]+)(=([^&+$#]*))/g)
['key1=1', 'key2=2', 'key3=3']
获取url中的参数
输入:?key1=1&key2=2&key3=3#test
输出:{key1: 1, key2: 2, key3: 3}
----way1--------
const getURLParameters =url =>
(url.replaceAll(/(#.*)/g,'').match(/([^?=&]+)(=([^&]*))/g)||[]).reduce(
(a,v)=>((a[v.slice(0,v.indexOf('='))]=v.slice(v.indexOf('=')+1)),a),
{}
)
getURLParameters('?key1=1&key2=2&key3=3#test')
------way2-----
const getURLParameters =url =>(url.match(/([^?=&]+)(=([^&+$#]*))/g)||[]).reduce(
(a,v)=>((a[v.slice(0,v.indexOf('='))]=v.slice(v.indexOf('=')+1)),a),
{}
)
getURLParameters('?key1=1&key2=2&key3=3#test')
{key1: '1', key2: '2', key3: '3'}
replace: 匹配成功把匹配的字符串换成新字符串;替换
| :正则里面是或者的意思;
语法:
var str = 'wo很帅,wo很善良,wo很努力';
var reg = /wo/g;
alert( reg.replace(str,'我'));
alert( reg.replace(str,function(s){ //回调函数里面的第一个参数是匹配字符串的内容,也就是reg;
return '我';
}) );
匹配子项 ():
正则表达式的整体:母体
从左边第一个小括号开始,称为第一个子项;
var str = '2015-11-15';
var reg = /\d+/g; 这是一个母体
var reg =/(\d+)(-)/g; 这是一个子项
str.replace(reg,function( s, s0 ){
s: 母体
s0:第一个子项
return s0 + '.';
});
alert(str); 结果:2015.11.15
\ 转义特殊字符
转义字符:
^ : 在[]中^ab代表除了这个ab外,在[]外^的意思是行首,匹配的字符串开头必须以规则字符 相同。
$: 代表的是行尾,匹配的字符串结尾必须以规则字符相同
\n :换行
\b: 单词边界,把单词隔开的就是单词边界 如:abc,bcd 逗号就是abc的单词边界也是bcd 的边界
\d:数字 \D:非数字,[^0-9]
\s:空格 \S:非空格,[^ ]
\w:字母数字下划线,[a-z0-9_] \W:非字符,[^a-z]
. : 任意字符
[a-z0-9] : a-z或0-9
a-z|0-9 :要么是a-z,要么是0-9,两者其一
[\u4e00-\u9fa5] :汉字的第一个字和汉字的最后一个字
需要转义的特殊字符:+*?/.(){}[]^$|
| 或者,两者之间只选一个
/abc|d/ abc或者d
/ab(c|d)/ abc或者abd
[] 字符集,或者
例如:[cd] 意思就是c或者d
[a-z] a到z
[0-9] 0到9
[^h] 除了h以外
注意:小括号在[]里面就是’(‘’)'字符
量词:
量词的基本形式:{n,m} 最少N次,最多M次
{n, }最少N次,最多不限
{ ,m}最少不限,最多m次
{n}正好n次
- : {1,}最少1次,最多不限
- :{0,} 最少0次,最多不限
? : {0,1}最少0次,最多1次
正则实例
邮箱判断
function isEmail(email){
var emailReg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$/;
if (emailReg2.test(email)){
return true;
}
else{
return false;
}
}
手机号判断
function isMobile(mobile){
if ( mobile.length != 11 ){
return 0;
}
if( checkNUM(mobile) == 0){
return 0;
}
var s = mobile.substring(0,1);
if( s != "1"){
return 0;
}
return 1;
}
检查是否是数字的函数
//检查是否数字
function checkNUM(NUM)
{
var i,j,strTemp;
strTemp="0123456789";
if ( NUM.length== 0)
return 0
for (i=0;i<NUM.length;i++)
{
j=strTemp.indexOf(NUM.charAt(i));
if (j==-1)
{
return 0;
}
}
return 1;
}
纯字母
纯字母
/^[a-zA-Z]+$/.test(data)
清空空格
// 清空 空格
trim: function (text) {
return text == null ?
"" :
text.toString().replace(/^\s+/, "").replace(/\s+$/, "");
},
获取字段的长度
function byteLength(str) {
// returns the byte length of an utf8 string
let s = str.length
for (var i = str.length - 1; i >= 0; i--) {
const code = str.charCodeAt(i)
if (code > 0x7f && code <= 0x7ff) s++
else if (code > 0x7ff && code <= 0xffff) s += 2
if (code >= 0xDC00 && code <= 0xDFFF) i--
}
return s
}
byteLength('https://www.baidu.com/s?ie=utf-8&f=8&rsv_b')
42
名字校验
static validateName(name) {
if(!(/^(?:[\u4e00-\u9fa5]+)(?:●[\u4e00-\u9fa5]+)*$|^[a-zA-Z0-9]+\s?[\.·\-()a-zA-Z]*[a-zA-Z]+$/.test(name))){
Util.showToast('名字格式不正确',1000)
return
} else {
return true
}
}
字符替换 将 - 替换成 /
var str=2020-3-11
str.replace(/-/g, "/");
2020/3/11
只能输入2个小数点 数据
InoutChange(e) {
//正则过滤2位
e.target.value = e.target.value.match(/^\d*(\.?\d{0,1})/g)[0] || null;
}
62开头17位数字
//MIS- 云闪付 19位数 62开头
if (!/^62\d{17}/.test(accountNumber))