复习字符串操作
- search 查找
- substring 获取子字符串
- charAt 获取某个字符
- split 分割字符串,获得数组
找出字符串中的所有数字:
- 用传统字符串操作完成
- 用正则表达式完成
<script>
var str='12 fff 87 er334 233 -=-=fa80';
/*
//传统的方法
var arr=[];
var tmp='';
for(var i=0;i<str.length;i++){
if(str.charAt(i)>='0' && str.charAt(i)<='9'){
tmp+=str.charAt(i);
}else{
if(tmp){
arr.push(tmp);
tmp='';
}
}
}
if(tmp){
arr.push(tmp);
tmp='';
}
alert(arr);*/
//正则
alert(str.match(/\d+/g))
</script>
什么是正则表达式:
- 正则:规则、模式
- 强大的字符串匹配工具
- 是一种正常人类很难读懂的文字
- RegExp对象
- JS风格——new RegExp("a","i");
- per风格——/a/i
<script>
var re=new RegExp('a');
var r=/a/;
var str='abcdef';
alert(str.search(re));
</script>
<script>
/*i为忽略大小写*/
var re=new RegExp('a','i');
var r=/a/i;
var str='abcdef';
alert(str.search(re));
</script>
字符串与正则配合:
- search 只能找出来字符出现的位置
- 字符串搜索
- 返回出现的位置
- 忽略大小写:i——ignore
- 判断浏览器类型
- match 把符合要求的东西提出来
- 获取匹配的项目
- 量词:+
- 量词变化:\d \d\d和\d+
- 全局匹配:g——global
- 例子:找出所有数字
- replace
- 替换所有匹配
- 返回替换后的字符串
- 例子:敏感词过滤
在正则表达式中,\d是转义——数字
<script>
var str='adsw 349fw fjnfwef 45';
var re=/\d/;
alert(str.search(re));//5 因为3出现在5的位置
</script>
<script>
var str='adsw 349fw fjnfwef 45';
var re=/\d/;
alert(str.match(re));//3 只告诉计算机找数字,没告诉计算机找几个
var all1=/\d/g;
alert(str.match(all1));//3,4,9,4,5
var all2=/\d\d/g;
alert(str.match(all2));//34,45
var all3=/\d\d\d/g;
alert(str.match(all3));//349
var all=/\d+/g;//+的意思的是若干
alert(str.match(all));//349,45
</script>
<script>
var str='abc aaa erw';
/*alert(str.replace('a','0'));//0bc aaa erw*/
/*var re=/a/;
alert(str.replace(re,'0'));//0bc aaa erw*/
var re=/a/g;
alert(str.replace(re,'0'));//0bc 000 erw
</script>
敏感词过滤:
<script>
window.onload=function(){
var txt1=document.getElementById('txt1');
var obtn=document.getElementById('btn');
var txt2=document.getElementById('txt2');
obtn.onclick=function(){
var re=/淘宝|北京|京东/g;
txt2.value=txt1.value.replace(re,'***')
}
}
</script>
</head>
<body>
<textarea name="" id="txt1" cols="30" rows="10"></textarea>
<input type="button" id="btn" value="过滤"/>
<textarea name="" id="txt2" cols="30" rows="10"></textarea>
</body>
元字符(方括号):
[abc]pc
apc bpc cpc符合要求 dpc不符合要求
<script>
var str='apc xpc ppc bpc spc tpc';
var re=/[apx]pc/g;
alert(str.match(re))//apc,xpc,ppc
</script>
- [a-z] [^a-z](除了a-z) [0-9]——\d
- [^a-z0-9] 除了a-z0-9
- 组合
- [a-z0-9A-Z]
- 实例:偷小说(过滤HTML标签)
- 转义字符
- .(点)——任意字符
- \d、\w、\s
- \D、\W、\S
<script>
window.onload=function(){
var txt1=document.getElementById('txt1');
var obtn=document.getElementById('btn');
var txt2=document.getElementById('txt2');
//过滤掉HTML标签 <全部字符>
obtn.onclick=function(){
//var re=/<.+>/g;//正则表达式很贪婪,删掉尽可能多的东西。<a>hfuiwhew</a><o>dwcerewfew</o>,类似这样的,会把<a></o>内的东西删掉
//<除了<>以外的任意字符>
var re=/<[^<>]+>/g;
txt2.value=txt1.value.replace(re,' ')
}
}
</script>
转义字符:
- \d 数字 [0-9] \D [^0-9]
- \w 英文、数字、下划线 [a-z0-9_] \W [^a-z0-9_]
- \s 空白字符 \S非空白字符
- 尽量在正则中不用.
量词:个数
- {n} 正好出现n次。
- {n,m} 最少n次,最多m次。
- {n,} 最少n次,最多不限
- + 其实实际上就是 {1,}
- ? {0,1} 最少0次最多1次 可有可无的
- * {0,} 最好不用
qq号:8位。第一位不能是0. [1-9]\d{7}
qq号:最少5位最多8位。 [1-9]\d{4,10}
固定电话:010-87496698 010是可有可无的 (0\d{2,3}-)?[1-9]\d{7}(-\d{1,5})?
表单校验实例:
- test()检验是否符合正则的规则。
邮箱:一串英文、数字、下划线 @ 一串英文、数字 . 一串英文
\w+ @ [a-z0-9]+ \. [a-z]+
<script>
window.onload=function(){
var oTxt=document.getElementById('txt1');
var oBtn=document.getElementById('btn1');
oBtn.onclick=function(){
var re=/\w+@[a-z0-9]+\.[a-z]+/i;
if(re.test(oTxt.value)){
alert('合法的邮箱');
}else{
alert('你写错了')
}
}
}
</script>
</head>
<body>
<input type="text" id="txt1"/>
<input type="button" id="btn1" value="校验"/>
</body>
假如----是dancingblue@126.com,也会返回 合法的邮箱。原因是text()方法,字符串一部分符合要求,则返回true.
如果^出现在[]中,[^ ].^的意思是除了。^如果不出现在[]中,代表行首(字符串的开头)。$代表行尾(字符串的结尾)
把re改成以下就正确了:
var re=/^\w+@[a-z0-9]+\.[a-z]+$/i;