javascript----正则

正则表达式原理及方法:

只能匹配字符串

规则:让计算机去认识的规则

规则语法:

    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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值