js正则表达式大全(4)

正则表达式在javascript中的几个实例1(转)

! 去除字符串两端空格的处理

如果采用传统的方式,就要可能就要采用下面的方式了 

//清除左边空格 
function js_ltrim(deststr) 
{ 
if(deststr==null)return ""; 
var pos=0; 
var retStr=new String(deststr); 
if (retStr.lenght==0) return retStr; 
while (retStr.substring(pos,pos+1)==" ") pos++; 
retStr=retStr.substring(pos); 
return(retStr); 
} 
//清除右边空格 
function js_rtrim(deststr) 
{ 
if(deststr==null)return ""; 
var retStr=new String(deststr); 
var pos=retStr.length; 
if (pos==0) return retStr; 
while (pos && retStr.substring(pos-1,pos)==" " ) pos--; 
retStr=retStr.substring(0,pos); 
return(retStr); 
} 
//清除左边和右边空格 
function js_trim(deststr) 
{ 
if(deststr==null)return ""; 
var retStr=new String(deststr); 
var pos=retStr.length; 
if (pos==0) return retStr; 
retStr=js_ltrim(retStr); 
retStr=js_rtrim(retStr); 
return retStr; 
} 

采用正则表达式,来去除两边的空格,只需以下代码 
String.prototype.trim = function() 

return this.replace(/(^\s*)|(\s*$)/g, ""); 
}

 

一句就搞定了, 
可见正则表达式为我们节省了相当的编写代码量


! 移动手机号的校验

如果采用传统的校验方式至少就要完成下面三步的校验,

(1). 是否是数字

(2).是否是11位

(3).数字的第三位是否是5,6,7,8,9

如果采用正则表达式校验,只需以下代码 

function checkMobile1(form) 
{ 
if (form.mobile.value > "") 
{ 
var reg=/13[5,6,7,8,9]\d{8}/; 
if ( form.mobile.value.match(reg)== null) 
{ 
alert("请输入正确的移动手机号码!"); 
form.mobile.focus(); return false; 
} 
} 
return true; 
} 

从上面的代码可以看出校验移动手机号只需定义一个var reg=/13[5,6,7,8,9]\d{8}/;模式匹配串就可以完成合法性校验了

 

! URL的校验, 
条件:必须以http:// 或 https:// 开头, 端口号必须为在1-65535 之间, 以下代码完成了合法性校验 

//obj:数据对象 
//dispStr :失败提示内容显示字符串 
function checkUrlValid( obj, dispStr) 
{ 
if(obj == null) 
{ 
alert("传入对象为空"); 
return false; 
} 
var str = obj.value;
var urlpatern0 = /^https?:\/\/.+$/i; 
if(!urlpatern0.test(str)) 
{ 
alert(dispStr+"不合法:必须以'http:\/\/'或'https:\/\/'开头!"); 
obj.focus(); 
return false; 
}
var urlpatern2= /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?.+$/i; 
if(!urlpatern2.test(str)) 
{ 
alert(dispStr+"端口号必须为数字且应在1-65535之间!"); 
obj.focus(); 
return false; 
}

var urlpatern1 =/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i;
if(!urlpatern1.test(str)) 
{ 
alert(dispStr+"不合法,请检查!"); 
obj.focus(); 
return false; 
}
var s = "0"; 
var t =0; 
var re = new RegExp(":\\d+","ig"); 
while((arr = re.exec(str))!=null) 
{ 
s = str.substring(RegExp.index+1,RegExp.lastIndex);
if(s.substring(0,1)=="0") 
{ 
alert(dispStr+"端口号不能以0开头!"); 
obj.focus(); 
return false; 
}
t = parseInt(s); 
if(t<1 || t >65535) 
{ 
alert(dispStr+"端口号必须为数字且应在1-65535之间!"); 
obj.focus(); 
return false; 
} 
} 
return true; 
} 

对url的校验,看上去有很多的代码,这是因为要给予出错提示, 否则只需var urlpatern1 =/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i; 一句就可以校验出url合法性了

 


正则表达式在JavaScript应用 

--------------------------------------------------------------
去掉字符串头尾多余的空格 
/g是全文查找所有匹配

function String.prototype.Trim(){return this.replace(/(^\s*)|(\s*$)/g, "");}

function String.prototype.LTrim(){return this.replace(/(^\s*)/g, "");}

function String.prototype.RTrim(){return this.replace(/(\s*$)/g, "");}

-------------------------------------------------------------- 

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

-------------------------------------------------------------- 
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function() 

return this.replace(/(^\s*)|(\s*$)/g, ""); 

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.jb51.net/page1.htm" 
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2") 
alert(s)

##利用正则表达式限制网页表单里的文本框输入内容:

-------------------------------------------------------------- 
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,'))"

-------------------------------------------------------------- 
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,'))"

-------------------------------------------------------------- 
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,'))"

-------------------------------------------------------------- 
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,'))" 
 

用正则表达式和javascript对表单进行全面验证 

使用时请将下面的javascript代码存到一个单一的js文件中。

1、表单要求 
<form name="formname" onSubmit="return validateForm(this)"></form> 
将对表单中的所有以下类型的域依次验证,所有验证是去除了前导和后缀空格的,要注意是区分大小写的。

2、空值验证 
表单中任意域加上emptyInfo属性将对此域是否为空进行验证(可以和最大长度验证\一般验证方式同时使用)。 
无此属性视为此域允许空值。 
如:<input type="text" name="fieldNamename" emptyInfo="字段不能为空!">

3、最大长度验证(可以和空值验证、一般验证方式同时使用): 
<input type="text" name="fieldNamename" maxlength="20" lengthInfo="最大长度不能超过20!"> 
或,<textarea maxlength="2000" lengthInfo="最大长度不能超过2000!">

3、一般验证方式(不对空值做验证): 
如:<input type="text" validator="^(19|20)[0-9]{2}$" errorInfo="不正确的年份!" >

4、标准验证(不与其它验证方式同时使用): 
全部通过<input type="hidden">来实现,并且不需要name属性以免提交到服务器。

4.1、合法日期验证: 
<input type="text" name="yearfieldName" value="2004">注:这里也可以是<select name="yearfieldName"></select>,以下同
<input type="text" name="monthfieldName" value="02"> 
<input type="text" name="dayfieldName" value="03"> 
<input type="hidden" validatorType="DateGroup" year="yearfieldName" month="monthfieldName" day="dayfieldName" errorInfo="不正确的日期!">
yearfieldName、monthfieldName、dayfieldName分别为年月日字段,月和日可以是两位(MM)或一位格式(M), 
此处不对每个字段分别检验(如果要检验,请在年月日三个域分别使用前面的一般验证方式),只对日期的最大值是否合法检查;

4.2、日期格式验证(请注意,此验证不对日期是否有效进行验证,还未找到从格式中得到年月日数据的方法^_^): 
<input type="text" name="datefieldName" value="2003-01-03 21:31:00"> 
<input type="hidden" validatorType="Date" fieldName="datefieldName"; format="yyyy-MM-dd HH:mm:ss" errorInfo="不正确的日期!">
其中格式仅对y、M、d、H、m、s进行支持(其它字符视为非时间的字符)

4.3、列表验证: 
检验列表(checkbox、redio、select)是否至少选中了一条记录(对select主要用于多项选择) 
<input type="checkbox" name="checkbox1"> 
<input type="hidden" validatorType="Checkbox" fieldName="checkbox1" errorInfo="请至少选中一条记录!">
其中validatorType可以是Checkbox、R、Select; 
对于一个select表单,如果要求选择一条不能是第一条的记录,请用下列方式: 
<select name="select1" emptyInfo="请选择一个选项!"> 
<option value="">==请选择==</option> 
<option value="1">1</option> 
<select>

4.4、Email验证: 
<input type="text" name="email"> 
<input type="hidden" fieldName="email" validatorType="Email" separator="," errorInfo="不正确的Email!">
其中separator为可选项,表示输入多个email时的分隔符(无此选项只能是一个地址)

4.5、加入其它javascript操作: 
<script type="text/javascript"> 
function functionname(){ 
自定义方法 

</script> 
表单中加入<input type="hidden" validatorType="javascript" functionName="functionname">(此时emptyInfo等属性无效)
时将调用function属性中指定的javascript方法(要求方法返回true或false,返回false将不再验证表单,也不提交表单)。

5、在表单通过验证提交前disable一个按钮(也可将其它域disable,不能与其它验证同在一个域),不要求按钮是表单中的最后一个 
<input type="button" name="提交" validatorType="disable">

6、不验证表单 
<input type="hidden" name="validate" value="0" functionName="functionname"> 
当validator域值为0时不对表单进行验证,直接提交表单或执行指定function并返回true后提交表单 
functionName为可选 

<script type="text/javascript"> 
function getStringLength(str){ 
var endvalue=0; 
var sourcestr=new String(str); 
var tempstr; 
for (var strposition = 0; strposition < sourcestr.length; strposition ++) { 
tempstr=sourcestr.charAt(strposition); 
if (tempstr.charCodeAt(0)>255 || tempstr.charCodeAt(0)<0) { 
endvalue=endvalue+2; 
} else { 
endvalue=endvalue+1; 
} 
} 
return(endvalue); 
} 
function trim(str){ 
if(str==null) return ""; 
if(str.length==0) return ""; 
var i=0,j=str.length-1,c; 
for(;i<str.length;i++){ 
c=str.charAt(i); 
if(c!=' ') break; 
} 
for(;j>-1;j--){ 
c=str.charAt(j); 
if(c!=' ') break; 
} 
if(i>j) return ""; 
return str.substring(i,j+1); 
} 
function validateDate(date,format,alt){ 
var time=trim(date.value); 
if(time=="") return; 
var reg=format; 
var reg=reg.replace(/yyyy/,"[0-9]{4}"); 
var reg=reg.replace(/yy/,"[0-9]{2}"); 
var reg=reg.replace(/MM/,"((0[1-9])|1[0-2])"); 
var reg=reg.replace(/M/,"(([1-9])|1[0-2])"); 
var reg=reg.replace(/dd/,"((0[1-9])|([1-2][0-9])|30|31)"); 
var reg=reg.replace(/d/,"([1-9]|[1-2][0-9]|30|31))"); 
var reg=reg.replace(/HH/,"(([0-1][0-9])|20|21|22|23)"); 
var reg=reg.replace(/H/,"([0-9]|1[0-9]|20|21|22|23)"); 
var reg=reg.replace(/mm/,"([0-5][0-9])"); 
var reg=reg.replace(/m/,"([0-9]|([1-5][0-9]))"); 
var reg=reg.replace(/ss/,"([0-5][0-9])"); 
var reg=reg.replace(/s/,"([0-9]|([1-5][0-9]))"); 
reg=new RegExp("^"+reg+"$"); 
if(reg.test(time)==false){//验证格式是否合法 
alert(alt); 
date.focus(); 
return false; 
} 
return true; 
} 
function validateDateGroup(year,month,day,alt){ 
var array=new Array(31,28,31,30,31,30,31,31,30,31,30,31); 
var y=parseInt(year.value); 
var m=parseInt(month.value); 
var d=parseInt(day.value); 
var maxday=array[m-1]; 
if(m==2){ 
if((y%4==0&&y%100!=0)||y%400==0){ 
maxday=29; 
} 
} 
if(d>maxday){ 
alert(alt); 
return false; 
} 
return true; 
} 
function validateCheckbox(obj,alt){ 
var rs=false; 
if(obj!=null){ 
if(obj.length==null){ 
return obj.checked; 
} 
for(i=0;i<obj.length;i++){ 
if(obj[i].checked==true){ 
return true; 
} 
} 
} 
alert(alt); 
return rs; 
} 
function validateRadio(obj,alt){ 
var rs=false; 
if(obj!=null){ 
if(obj.length==null){ 
return obj.checked; 
} 
for(i=0;i<obj.length;i++){ 
if(obj[i].checked==true){ 
return true; 
} 
} 
} 
alert(alt); 
return rs; 
} 
function validateSelect(obj,alt){ 
var rs=false; 
if(obj!=null){ 
for(i=0;i<obj.options.length;i++){ 
if(obj.options[i].selected==true){ 
return true; 
} 
} 
} 
alert(alt); 
return rs; 
} 
function validateEmail(email,alt,separator){ 
var mail=trim(email.value); 
if(mail=="") return; 
var em; 
var myReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/; 
if(separator==null){ 
if(myReg.test(email.value)==false){ 
alert(alt); 
email.focus(); 
return false; 
} 
} 
else{ 
em=email.value.split(separator); 
for(i=0;i<em.length;i++){ 
em[i]=em[i].trim(); 
if(em[i].length>0&&myReg.test(em[i])==false){ 
alert(alt); 
email.focus(); 
return false; 
} 
} 
} 
return true; 
} 
function validateForm(theForm){// 若验证通过则返回true 
var disableList=new Array(); 
var field = theForm.elements; // 将表单中的所有元素放入数组 
for(var i = 0; i < field.length; i++){ 
var vali=theForm.validate; 
if(vali!=null){ 
if(vali.value=="0"){ 
var fun=vali.functionName; 
if(fun!=null){ 
return eval(fun+"()"); 
} 
else{ 
return true; 
} 
} 
}
var empty=false; 
var value=trim(field[i].value); 
if(value.length==0){//是否空值 
empty=true; 
} 
var emptyInfo=field[i].emptyInfo;//空值验证 
if(emptyInfo!=null&&empty==true){ 
alert(emptyInfo); 
field[i].focus(); 
return false; 
} 
var lengthInfo=field[i].lengthInfo;//最大长度验证 
if(lengthInfo!=null&&getStringLength(value)>field[i].maxLength){ 
alert(lengthInfo); 
field[i].focus(); 
return false; 
}
var validatorType=field[i].validatorType; 
if(validatorType!=null){//其它javascript 
var rs=true; 
if(validatorType=="javascript"){ 
eval("rs="+field[i].functionName+"()"); 
if(rs==false){ 
return false; 
} 
else{ 
continue; 
} 
} 
else if(validatorType=="disable"){//提交表单前disable的按钮 
disableList.length++; 
disableList[disableList.length-1]=field[i]; 
continue; 
} 
else if(validatorType=="Date"){ 
rs=validateDate(theForm.elements(field[i].fieldName),field[i].format,field[i].errorInfo);
} 
else if(validatorType=="DateGroup"){ 
rs=validateDateGroup(theForm.elements(field[i].year),theForm.elements(field[i].month),theForm.elements(field[i].day),field[i].errorInfo);
} 
else if(validatorType=="Checkbox"){ 
rs=validateCheckbox(theForm.elements(field[i].fieldName),field[i].errorInfo); 
} 
else if(validatorType=="Radio"){ 
rs=validateRadio(theForm.elements(field[i].fieldName),field[i].errorInfo); 
} 
else if(validatorType=="Select"){ 
rs=validateSelect(theForm.elements(field[i].fieldName),field[i].errorInfo); 
} 
else if(validatorType=="Email"){ 
rs=validateEmail(theForm.elements(field[i].fieldName),field[i].errorInfo); 
} 
else{ 
alert("验证类型不被支持, fieldName: "+field[i].name); 
return false; 
} 
if(rs==false){ 
return false; 
} 
} 
else{//一般验证 
if(empty==false){ 
var v = field[i].validator; // 获取其validator属性 
if(!v) continue; // 如果该属性不存在,忽略当前元素 
var reg=new RegExp(v); 
if(reg.test(field[i].value)==false){ 
alert(field[i].errorInfo); 
field[i].focus(); 
return false; 
} 
} 
} 
} 
for(i=0;i<disableList.length;i++){ 
disableList[i].disabled=true; 
} 
return true; 
} 
</script>

 

posted @ 2016-01-09 23:03  zzp5980  阅读(267)  评论(0编辑  收藏  举报