js正则
1.正则的声明和使用
通过构造函数定义
var 变量名= new RegExp(/表达式/);
通过直接量定义(简单方便,我们一般用这个)
var 变量名= /表达式/;
匹配模式:
i 区分大小写 把大写转换为小写
g global 全局变量
常用方法,
test方法可用于检测传入的字符串是否包含符合该规则的字符串,并返回布尔值
exp.test("要检测的字符串")
replace() 方法 替换
字符串对象.replace(被替换正则式或字符串,替换的目标字符),返回值:替换后的新字符串
正则表达式格式:var 变量名= new RegExp(/表达式/, 修正符);
2.转义字符:
3.\r,\n,\r\n的区别
在万恶的旧社会,打字机换行(\n newline)之后只会下移一行,需要回到一行的开头(\r return)才能继续打字
\n的含义改为“移动到下一行的开头”
4.括号
()表示一组
[]表示一个字符的位置
{}表示次数
5.或运算符:| 表示或 ,或的优先级最低可以通过()提升优先级
eg.3> 5 | 3> 6
语法: x | y 匹配 x 或 y
在基础语法里面, 采取的措施就是, 要检测的对象, 只要有满足其中一个条件的对象,返回结果就为真。
console.log(/hei/.test("hei"));
console.log(/hei/.test("he"));
console.log(/hei/.test("heihei"));
console.log(/hei/.test("aheia"));
console.log(/hei/.test("aheaia"));
console.log(/andy|and/.test("andy"));
console.log(/andy|and/.test("and"));
console.log(/andy|and/.test("andandy"));
console.log(/andy|and/.test("any"));
console.log(/andy|and/.test("any"));
console.log(/food|foot/.test("foo"));
console.log(/food|t/.test("foo"));
console.log(/foo(d|t)/.test("foo"));
console.log(/foo(d|t)/.test("food"));
console.log(/foo(d|t)/.test("foot"));
6.非运算符:^
^只有在[]内才表示非 ,在外边表示限制开始
/^abc/ 和 /[^abc]/ 表达的意思是是不一样的
7.边界
^ :会匹配行或者字符串的起始位置,限制开头
注意,一个区别: ^只有在[]内才表示非 在外边表示限制开始
/^abc/ 和 /[^abc]/ 表达的意思是是不一样的
$ :会匹配行或字符串的结尾位置
console.log(/^abc/.test("abc"));
console.log(/^abc/.test("abcd"));
console.log(/^abc/.test("aabcd"));
console.log(/^abc$/.test("abc"));
console.log(/^abc$/.test("abcd"));
console.log(/^abc$/.test("aabc"));
8.量词
"*" 重复零次或更多 x>=0 贪婪
"+" 重复一次或更多次x>=1
"?" 重复零次或一次 x=(0||1)
console.log(/^a*$/.test("a"));
console.log(/^a*$/.test("aa"));
console.log(/^abc*$/.test("ab"));
console.log(/^abc*$/.test("abcc"));
console.log(/^(abc)*$/.test("cd"));
console.log(/^(abc)*$/.test("ab"));
console.log(/^(abc)*$/.test("abcabc"));
{n} n次 x=n
{n,} 重复n次或更多 x>=n
{n,m} 重复出现的次数,最少匹配 n 次且最多匹配 m 次
9.其他
- : 连接,表示a到b之间的区域,要在[]才是这个意思
10.预定义类:
. [^\n\r] 除了换行和回车之外的任意字符
\d [0-9] 数字字符digit
\D [^0-9] 非数字字符
\w [a-zA-Z0-9_] 单词字符(所有的英文字母数字和_)word
\W [^a-zA-Z0-9_] 非单词字符
\s [\f\r\n\t\v] 不可见字符 空白字符 space
\S [^\f\r\n\t\v] 可见字符
11字符类
简单类[abc] 字符集合。匹配所包含的任意一个字符
console.log(/[abc]/.test("a"));
console.log(/[abc]/.test("b"));
console.log(/[abc]/.test("c"));
console.log(/[abc]/.test("ac"));
console.log(/[abc]/.test("d"));
负向类[^abc] 表示该位置不可以出现的字符 取反
console.log(/[^abc]/.test("a"));// false
console.log(/[^abc]/.test("b"));// false
console.log(/[^abc]/.test("c"));// false
console.log(/[^abc]/.test("ac")); // false
console.log(/[^abc]/.test("d")); // true
范围类[a-e] 表示该位置可以出现的字符的范围
组合类[a-xA-E0-9] 范围类的组合12.例子
验证密码强度
varinp1 =document.getElementById("inp1");
varstrength =document.getElementById("strength");
varstrengthLevel =document.getElementById("strengthLevel");
vararr = ["","低","中","高"];
inp1.onkeyup =function() {
varlv =0;
if (/[0-9]/.test(this.value)) {
lv++
}
if (/[a-z]/.test(this.value)) {
lv++
}
if (/[A-Z]/.test(this.value)) {
lv++;
}
strength.innerHTML =arr[lv];
strengthLevel.className ="strengthLv" +lv;
}
验证座机
匹配电话号码:
010-12345678
0313-1234567
开头3或4位(首位为0)
后面7或8位
varregexp = /^0\d{2,3}-\d{7,8}$/;
验证姓名 中文姓名
只能是汉字 并且字数 2-6个之间
[\u4e00-\u9fa5]
unicode转中文可以用unescape()
unescape('\u4e00')
完整版表单验证
checkRE($("inp4"),regTel);
functioncheckRE(obj,regexp) {
obj.onblur =function() {
if (regexp.test(this.value)) {
this.nextSibling.innerHTML = "正确";
this.nextSibling.className = "right";
}else {
this.nextSibling.innerHTML = "错误";
this.nextSibling.className = "wrong";
}
}
}
验证邮箱:
/^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; 这是照顾国外邮箱的完整写法
注意:字符放到 [] 内是不需要转义的 比如 \. 需要转义, 但是 [.+] 方括号里面的 . 和 + 就不需要转义了
13.常见项目的匹配
匹配国内电话号码:
/^0\d{2,3}-\d{7,8}$/
匹配姓名:
/^[\u4e00-\u9fa5]{2,}$/
匹配腾讯QQ号:
/^[1-9]\d{4,10}$/
匹配手机号:
/^(13[0-9]|14[57]|15[0-9]|18[0-9])\d{8}$/
匹配邮箱:
/^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/