??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲已满18点击进入在线观看,亚洲精品无码日韩国产不卡?V,国产亚洲情侣一区二区无码AV http://m.tkk7.com/19851985lili/category/19189.html☜GivE mE HapPy ? zh-cnTue, 27 Feb 2007 15:58:23 GMTTue, 27 Feb 2007 15:58:23 GMT60javascript 常用验证 http://m.tkk7.com/19851985lili/articles/100548.html☜♥☞MengChuChen☜♥☞MengChuChenSun, 25 Feb 2007 03:32:00 GMThttp://m.tkk7.com/19851985lili/articles/100548.htmlhttp://m.tkk7.com/19851985lili/comments/100548.htmlhttp://m.tkk7.com/19851985lili/articles/100548.html#Feedback0http://m.tkk7.com/19851985lili/comments/commentRss/100548.htmlhttp://m.tkk7.com/19851985lili/services/trackbacks/100548.html1、数字验证内
1.1 整数
1.2 大于0的整?Q用于传来的ID的验?
1.3 负整数的验证
1.4 整数不能大于iMax
1.5 整数不能于iMin
2、时间类
2.1 短时_形如 (13:04:06)
2.2 短日期,形如 (2003-12-05)
2.3 长时_形如 (2003-12-05 13:04:06)
2.4 只有q和月。Ş?2003-05,或?003-5)
2.5 只有时和分?形如(12:03)
3、表单类
3.1 所有的表单的值都不能为空
3.2 多行文本框的g能ؓI?br />3.3 多行文本框的g能超qsMaxStrleng
3.4 多行文本框的g能少于sMixStrleng
3.5 判断单选框是否选择?br />3.6 判断复选框是否选择.
3.7 复选框的全选,多选,全不选,反?br />3.8 文g上传q程中判断文件类?br />4、字W类
4.1 判断字符全部由a-Z或者是A-Z的字字母l成
4.2 判断字符由字母和数字l成?br />4.3 判断字符由字母和数字Q下划线,点号l成.且开头的只能是下划线和字?br />4.4 字符串替换函?Replace();
5、浏览器c?br />5.1 判断览器的cd
5.2 判断ie的版?br />5.3 判断客户端的分L?

6、结合类
6.1 email的判断?br />6.2 手机L的验?br />6.3 w䆾证的验证


二、功能类

1、时间与相关控gc?br />1.1 日历
1.2 旉控g
1.3 万年?br />1.4 昄动态显C时钟效果(文本Q如OA中时_
1.5 昄动态显C时钟效?(囑փQ像手表)
2、表单类
2.1 自动生成表单
2.2 动态添加,修改Q删除下拉框中的元素
2.3 可以输入内容的下拉框
2.4 多行文本框中只能输入iMax文字。如果多输入了,自动减少到iMax个文字(多用于短信发?

3、打印类
3.1 打印控g
4、事件类
4.1 屏蔽右键
4.2 屏蔽所有功能键
4.3 --> ?lt;-- F5 F11,F9,F1
4.4 屏蔽l合键ctrl+N
5、网设计类
5.1 q箋滚动的文字,囄Q注意是q箋的,两段文字和图片中没有I白出现Q?br />5.2 html~辑控gc?br />5.3 颜色选取框控?br />5.4 下拉菜单
5.5 两层或多层次的下拉菜?br />5.6 仿IE菜单的按钮。(效果如rongshuxa.com的导航栏?
5.7 状态栏Qtitle栏的动态效果(例子很多Q可以研I一下)
5.8 双击后,|页自动滚屏
6、树型结构?br />6.1 asp+SQL?br />6.2 asp+xml+sql?br />6.3 java+sql或者java+sql+xml
7、无Ҏ效果的制?br />8、连动下拉框技?br />9、文本排?br />---------------------------------------------------------------------------------------

一、验证类
1、数字验证内
1.1 整数
/^(-|\+)?\d+$/.test(str)
1.2 大于0的整?Q用于传来的ID的验?
/^\d+$/.test(str)
1.3 负整数的验证
/^-\d+$/.test(str)
2、时间类
2.1 短时_形如 (13:04:06)
function isTime(str)
{
var a = str.match(/^(\d{1,2})(?(\d{1,2})\2(\d{1,2})$/);
if (a == null) {alert('输入的参C是时间格?); return false;}
if (a[1]>24 || a[3]>60 || a[4]>60)
{
alert("旉格式不对");
return false
}
return true;
}
2.2 短日期,形如 (2003-12-05)
function strDateTime(str)
{
var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
if(r==null)return false;
var d= new Date(r[1], r[3]-1, r[4]);
return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}
2.3 长时_形如 (2003-12-05 13:04:06)
function strDateTime(str)
{
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2})\d{1,2})\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
}
2.4 只有q和月。Ş?2003-05,或?003-5)
2.5 只有时和分?形如(12:03)
3、表单类
3.1 所有的表单的值都不能为空

3.2 多行文本框的g能ؓI?br />3.3 多行文本框的g能超qsMaxStrleng
3.4 多行文本框的g能少于sMixStrleng
3.5 判断单选框是否选择?br />3.6 判断复选框是否选择.
3.7 复选框的全选,多选,全不选,反?br />3.8 文g上传q程中判断文件类?br />4、字W类
4.1 判断字符全部由a-Z或者是A-Z的字字母l成

4.2 判断字符由字母和数字l成?/p>

4.3 判断字符由字母和数字Q下划线,点号l成.且开头的只能是下划线和字?br />/^([a-zA-z_]{1})([\w]*)$/g.test(str)
4.4 字符串替换函?Replace();
5、浏览器c?br />5.1 判断览器的cd
window.navigator.appName
5.2 判断ie的版?br />window.navigator.appVersion
5.3 判断客户端的分L?br />window.screen.height; window.screen.width;

6、结合类
6.1 email的判断?br />function ismail(mail)
{
return(new RegExp(/^\w+((-\w+)|(\.\w+))*\-AT-[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/).test(mail));
}
6.2 手机L的验?br />6.3 w䆾证的验证
function isIdCardNo(num)
{
if (isNaN(num)) {alert("输入的不是数字!"); return false;}
var len = num.length, re;
if (len == 15)
re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
else if (len == 18)
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
else {alert("输入的数字位C对!"); return false;}
var a = num.match(re);
if (a != null)
{
if (len==15)
{
var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
else
{
var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
}
if (!B) {alert("输入的n份证?"+ a[0] +" 里出生日期不对!"); return false;}
}
return true;
}
-------------------------------------------------------------------------------------

3.7 复选框的全选,多选,全不选,反?/p>

全?/p>


全?/p>

function checkAll(str)
{
var a = document.getElementsByName(str);
var n = a.length;
for (var i=0; ia[i].checked = window.event.srcElement.checked;
}
function checkItem(str)
{
var e = window.event.srcElement;
var all = eval("document.hrong."+ str);
if (e.checked)
{
var a = document.getElementsByName(e.name);
all.checked = true;
for (var i=0; i{
if (!a[i].checked){ all.checked = false; break;}
}
}
else all.checked = false;
}


3.8 文g上传q程中判断文件类?/p>


-------------------------------------------------------------------------------------
Q.w䆾证严格验证:

Q.验证QP地址

function isip(s){
var check=function(v){try{return (v<=255 && v>=0)}catch(x){return false}};
var re=s.split(".")
return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false
}

var s="202.197.78.129";
alert(isip(s))

Q.加sp1后还能用的无ҎH口Q!


/*--- Special Thanks For andot ---*/

/*
This following code are designed and writen by Windy_sk
You can use it freely, but u must held all the copyright items!
/

/- Thanks For andot Again ---*/

var CW_width = 400;
var CW_height = 300;
var CW_top = 100;
var CW_left = 100;
var CW_url = "/";
var New_CW = window.createPopup();
var CW_Body = New_CW.document.body;
var content = "";
var CSStext = "margin:1px;color:black; border:2px outset;border-style:expression(onmouseout=onmouseup=function(){this.style.borderStyle='outset'}, onmousedown=function(){if(event.button!=2)this.style.borderStyle='inset'});background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;";

//Build Window
include.startDownload(CW_url, function(source){content=source});

function insert_content(){
var temp = "";
CW_Body.style.overflow = "hidden";
CW_Body.style.backgroundColor = "white";
CW_Body.style.border = "solid black 1px";
content = content.replace(/]*)>/g,"");
temp += "";
temp += "";
temp += "Chromeless Window For IE6 SP1";
temp += "";
temp += "?";
temp += "0";
temp += "1";
temp += "x";
temp += "";
temp += "";
temp += content;
temp += "

";
temp += "";
CW_Body.innerHTML = temp;
}

setTimeout("insert_content()",1000);

var if_max = true;
function show_CW(){
window.moveTo(10000, 10000);
if(if_max){
New_CW.show(CW_top, CW_left, CW_width, CW_height);
if(typeof(New_CW.document.all.include)!="undefined"){
New_CW.document.all.include.style.width = CW_width;
New_CW.document.all.Max.innerText = "1";
}

}else{
New_CW.show(0, 0, screen.width, screen.height);
New_CW.document.all.include.style.width = screen.width;
}
}

window.onfocus = show_CW;
window.onresize = show_CW;

// Move Window
var drag_x,drag_y,draging=false

function drag_move(e){
if (draging){
New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height);
return false;
}
}

function drag_down(e){
if(e.button==2)return;
if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height)return;
drag_x=e.clientX;
drag_y=e.clientY;
draging=true;
e.srcElement.setCapture();
}

function drag_up(e){
draging=false;
e.srcElement.releaseCapture();
if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) return;
CW_top = e.screenX-drag_x;
CW_left = e.screenY-drag_y;
}


?
电话L的验?/p>

要求Q?br />  (1)电话L由数字?("?)"?-"构成
  (2)电话L???br />  (3)如果电话L中包含有区号Q那么区号ؓ三位或四?br />  (4)区号?("?)"?-"和其他部分隔开
  (5)Ud电话L?1?2位,如果?2?那么W一位ؓ0
  (6)11位移动电话号码的W一位和W二位ؓ"13"
  (7)12位移动电话号码的W二位和W三位ؓ"13"
  Ҏq几条规则,可以与出以下正则表达式:
  (^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)

function PhoneCheck(s) {
var str=s;
var reg=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/
alert(reg.test(str));
}

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


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

//验法Z?br />function isCorporationCode(s){
var patrn=/^(\d){15}$/;
if (!patrn.exec(s)) return false
return true
}

//校验d名:只能输入5-20个以字母开头、可带数字、“_”、?”的字串
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}
//校验用户姓名Q只能输?-30个以字母开头的字串
function isTrueName(s)
{
var patrn=/^[^`~!@#$%^&*()+-=|\\\[\]\{\}:;\'\,.<>/? 0-9]{2,19}$/;
if (!patrn.exec(s)) return false
return true
}

//校验密码Q只能输?-15个字母、数?br />function isPasswd(s)
{
var patrn=/^[a-zA-Z0-9]{6,15}$/;
if (!patrn.exec(s)) return false
return true
}

//验体?br />function isAvoirdupois(s)
{
var patrn=/^[1-9]{1}[0-9]{0,2}$/;
var patrn2=/^[1-9]{1}$/;
var intPart=s.indexOf('.');
var decPart=s.lastIndexOf('.');
if (intPart==-1 && patrn.exec(s) && eval(s)>=2 && eval(s)<=200) return true
if (intPart!=decPart || intPart==0 || intPart+2!=s.length) return false
if (!patrn.exec(s.substring(0,intPart)) || !patrn2.exec(s.substring(decPart+1))) return false
if (eval(s)<2 || eval(s)>200) return false
return true
}

//校验普通电话、传真号码:可以?”开_除数字外Q可含有??br />function isTel(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验手机LQ必M数字开_除数字外Q可含有??br />function isMobile(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验地区代码
function isAreaCode(s)
{
var patrn=/^(\d){6}$/;
if (!patrn.exec(s)) return false
return true
}

//校验邮政~码
function isPostalCode(s)
{
var patrn=/^[1-9]{1}(\d){5}$/;
if (!patrn.exec(s)) return false
return true
}

//校验搜烦关键?br />function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|\\\[\]\{\}:;\'\,.<>/? ]{1}[^`~!@$%^&()+=|\\\[\]\{\}:;\'\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}

//校验是否为ip地址
function isIP(s)
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

//验页码是否正?br />function isPage(s)
{
var patrn=/^[1-9]{1}[0-9]{0,2}$/;
if (!patrn.exec(s)) return false
return true
}

//表单输入值错误提C?br />function vErr(o,s){
alert(s);
if (o) o.focus();
return false;
}

//判断单?br />function chkRadio(o){
for (i=0;iif (o[i].checked) return true;
}
return false;
}
//====================================表单c?===============================
// 文g上传q程中判断文件类?br />/*

/

//表单的g能ؓI?br />function isNull(elem){
//var pattern=/^\s+|\s+$/;
if(elem.replace(/(^\s+|\s$)/g, "")==""){
return false;
}else{
return true;
}
}
//不能过imax字符
function imax(elem){
if(elem.length>imax){
return false;
}else{
return true;
}
}
//不能于imix字符
function imix(elem){
if(elem.lengthreturn false;
}else{
return true;
}
}
//输入Z文判?br />function isChinese(elem){
var pattern=/[^\x00-\xff]/g;
if(pattern.test(elem)){
//包含中文
return false;
}else{
//不包含中?br />return true;
}
}

/ *********************************************************************************************************************

.cMenu {
FILTER: alpha(opacity=0);BACKGROUND-COLOR: #D6D3CE;BORDER-BOTTOM: #666666 2px solid; BORDER-LEFT: #E4E4E4 2px solid; BORDER-RIGHT: #666666 2px solid; BORDER-TOP: #E4E4E4 2px solid; COLOR: #000000; CURSOR: default; FONT-SIZE: 9pt; color:#000000;FONT-WEIGHT: normal; LINE-HEIGHT: 20px; POSITION: absolute; VISIBILITY: hidden; WIDTH: 110px
}
.menuitems {
font-size:9pt;
MARGIN: 2px;
PADDING-BOTTOM: 0px;
PADDING-LEFT: 15px;
PADDING-RIGHT: 3px;
PADDING-TOP: 0px;
}

<!--[if IE]>
onmouseover=highlightie5()>

电话L的验?/p>

要求Q?br />  (1)电话L由数字?("?)"?-"构成
  (2)电话L???br />  (3)如果电话L中包含有区号Q那么区号ؓ三位或四?br />  (4)区号?("?)"?-"和其他部分隔开
  (5)Ud电话L?1?2位,如果?2?那么W一位ؓ0
  (6)11位移动电话号码的W一位和W二位ؓ"13"
  (7)12位移动电话号码的W二位和W三位ؓ"13"
  Ҏq几条规则,可以与出以下正则表达式:
  (^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)


<script language="javascript">
function PhoneCheck(s) {
var str=s;
var reg=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/
alert(reg.test(str));
}
</script>
<input type=text name="iphone">
<input type=button onclick="PhoneCheck(document.all.iphone.value)" value="Check">
----------------------------------------------------------------------------------------

<%
'********************************************
'函数功能Q正则表辑ּ校验
'参数patrnQ要校验的类?br />' "User" - 用户?br />' "Truename" - 英文姓名
' "Passwd" - 密码
' "Tel" - 电话/传真
' "Mobil" - 手机
' "Date" - 日期Q格式:yyyy-mm-ddQ?br />' "Email" - 电子邮g
' "Postalcode" - 邮政~码
' "Search" - 搜烦关键?br />' "Int" - 整数
'参数strngQ要校验的字?br />'q回|校验l果Q正返回trueQ错误返回false
'********************************************
Function IsVerify(patrn,strng)
strng=Trim(strng)
Select Case patrn
Case "User" '用户?br />patrn="^[a-z]{1}([a-z0-9]|[._]){2,19}$"
Case "Truename" '英文姓名
patrn="^[a-zA-Z]{1,30}$"
Case "Passwd" '密码
patrn="^(\w){6,20}$"
Case "Tel" '电话/传真
patrn="^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$"
Case "Mobil" '手机
patrn="^(\d)+[-]?(\d){6,12}$"
Case "Date" '日期Q格式:yyyy-mm-ddQ?br />patrn="^[12]{1}(\d){3}[-][01]?(\d){1}[-][0123]?(\d){1}$"
Case "Email" '电子邮g
patrn="^((\w)|[-]|[.])+@(((\w)|[-])+[.])+[a-z]{2,4}$"
Case "Postalcode" '邮政~码
patrn="^[a-z0-9 ]{3,12}$"
Case "Search" '搜烦关键?br />patrn="^[^`~!@#$%^&*()+=|\\\[\]\{\}:;\'\,.<>/?]{1}[^`~!@$%^&()+=|\\\[\]\{\}:;\'\,.<>?]{0,19}$"
Case "Int" '整数
patrn="^[1-9]{1}[0-9]{0,6}$"
Case "Array"
patrn="^[0-9]{1}([0-9]|[\,]){0,150}$"
End Select
Dim regEx
Dim Match
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
Matches = regEx.test(strng)
IsVerify = Matches
Set regEx = Nothing
End Function

'********************************************
'函数功能Q对输入框的Ҏ字串q行qo保存
'参数strPassQ过滤前的字W串
'q回|qo后的字符?br />'********************************************
Function SQLencode(byVal strPass)
strPass = Replace(strPass, "&", "&")
strPass = Replace(strPass, "<", "<")
strPass = Replace(strPass, ">", ">")
strPass = Replace(strPass, """", """)
strPass = Replace(strPass, "'", "'")
strPass = Replace(strPass, " ", " ")
strPass = Replace(strPass,chr(13)&chr(10),"<br/>")
SQLencode = strPass
End Function

'********************************************
'函数功能Q对SQLencode函数qo后的字符串进行还?br />'参数strPassQ经q过滤后的字W串
'q回|q原的过滤前的字W串
'********************************************
Function SQLdecode(byVal strPass)
If Not isNull(strPass) Then
strPass = Replace(strPass, "<", "<")
strPass = Replace(strPass, ">", ">")
strPass = Replace(strPass, ""","""" )
strPass = Replace(strPass, "'","'" )
strPass = Replace(strPass,"<br/>",chr(13)&chr(10))
End If
SQLdecode = strPass
End Function

'********************************************
'函数功能Q生成随机密码(字符为数字与大小写字母集合)
'参数lengthQ密码长?br />'q回|随机密码
'********************************************
Function random(length)
Dim n,str
rnds=""
Randomize
For i=1 To length
n=Int(75*Rnd+48)
If (n>57 and n<65) Or (n>90 and n<97) Then
i=i-1
Else
rnds=rnds&Chr(n)
End If
Next
random=rnds
End Function

'********************************************
'函数功能Q对密码q行加密/解密Q最大长度ؓ15位)
'********************************************
Function Encrypt(preString)
Dim pwds,s
pwds=""
s=Left(preString,15)
For i=1 To Len(s)
seed=170-Asc(Mid(s,i,1))-i
pwds=pwds & Chr(seed)
Next
Encrypt=pwds
End Function

'********************************************
'函数功能Q格式化当前旉字串
'参数Q无
'q回|q回当前旉的纯数字字符串方式的表示Q例如:当前旉2001-10-3 2:34:6Q返回字W串"20011003023406"Q?br />'********************************************
Function TheDate()
y=year(date())
m=month(date())
d=day(date())
h=Hour(time())
n=Minute(time())
s=Second(time())
If Len(m)=1 Then m="0"&m
If Len(d)=1 Then d="0"&d
If Len(h)=1 Then h="0"&h
If Len(n)=1 Then n="0"&n
If Len(s)=1 Then s="0"&s
thedate=y&m&d&h&n&s
End Function

'********************************************
'函数功能Q返回字W串的长?br />'参数Q字W串
'q回|字符串长?br />'********************************************
Function strLen(str)
dim p_len
p_len=0
strlen=0
if trim(str)<>"" then
p_len=len(trim(str))
for xx=1 to p_len
if asc(mid(str,xx,1))<0 then
strlen=int(strlen) + 2
else
strlen=int(strlen) + 1
end if
next
end if
End Function

'********************************************
'函数功能Q发送邮仉知
'参数Q字W串
'q回|成功/p|
'********************************************
Function SendMail(ToAddress, Subject, Body)
On Error Resume Next
Set objMail = Server.CreateObject("JMail.Message")
objMail.From = ADR_Email
objMail.FromName = "ADR理中心"
objMail.Subject = Subject
objMail.AddRecipient ToAddress
objMail.Body = Body
If objMail.Send("") Then
SendMail = True
Else
SendMail = False
End If
If Err.Number<> 0 Then SendMail = False
Set objMail = Nothing
On Error Goto 0
End Function
%>
-----------------------------------------------------------------------------------

//验法Z?br />function isCorporationCode(s){
var patrn=/^(\d){15}$/;
if (!patrn.exec(s)) return false
return true
}

//校验d名:只能输入5-20个以字母开头、可带数字、“_”、?”的字串
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}
//校验用户姓名Q只能输?-30个以字母开头的字串
function isTrueName(s)
{
var patrn=/^[^`~!@#$%^&*()+-=|\\\[\]\{\}:;\'\,.<>/? 0-9]{2,19}$/;
if (!patrn.exec(s)) return false
return true
}

//校验密码Q只能输?-15个字母、数?br />function isPasswd(s)
{
var patrn=/^[a-zA-Z0-9]{6,15}$/;
if (!patrn.exec(s)) return false
return true
}

//验体?br />function isAvoirdupois(s)
{
var patrn=/^[1-9]{1}[0-9]{0,2}$/;
var patrn2=/^[1-9]{1}$/;
var intPart=s.indexOf('.');
var decPart=s.lastIndexOf('.');
if (intPart==-1 && patrn.exec(s) && eval(s)>=2 && eval(s)<=200) return true
if (intPart!=decPart || intPart==0 || intPart+2!=s.length) return false
if (!patrn.exec(s.substring(0,intPart)) || !patrn2.exec(s.substring(decPart+1))) return false
if (eval(s)<2 || eval(s)>200) return false
return true
}

//校验普通电话、传真号码:可以?”开_除数字外Q可含有??br />function isTel(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验手机LQ必M数字开_除数字外Q可含有??br />function isMobile(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}

//校验地区代码
function isAreaCode(s)
{
var patrn=/^(\d){6}$/;
if (!patrn.exec(s)) return false
return true
}

//校验邮政~码
function isPostalCode(s)
{
var patrn=/^[1-9]{1}(\d){5}$/;
if (!patrn.exec(s)) return false
return true
}

//校验搜烦关键?br />function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|\\\[\]\{\}:;\'\,.<>/? ]{1}[^`~!@$%^&()+=|\\\[\]\{\}:;\'\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}

//校验是否为ip地址
function isIP(s)
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}

//验页码是否正?br />function isPage(s)
{
var patrn=/^[1-9]{1}[0-9]{0,2}$/;
if (!patrn.exec(s)) return false
return true
}

//表单输入值错误提C?br />function vErr(o,s){
alert(s);
if (o) o.focus();
return false;
}

//判断单?br />function chkRadio(o){
for (i=0;i<o.length;i++){
if (o[i].checked) return true;
}
return false;
}



☜♥☞MengChuChen 2007-02-25 11:32 发表评论
]]>
常用js代码?http://m.tkk7.com/19851985lili/articles/97651.html☜♥☞MengChuChen☜♥☞MengChuChenFri, 02 Feb 2007 12:38:00 GMThttp://m.tkk7.com/19851985lili/articles/97651.htmlhttp://m.tkk7.com/19851985lili/comments/97651.htmlhttp://m.tkk7.com/19851985lili/articles/97651.html#Feedback0http://m.tkk7.com/19851985lili/comments/commentRss/97651.htmlhttp://m.tkk7.com/19851985lili/services/trackbacks/97651.html阅读全文

☜♥☞MengChuChen 2007-02-02 20:38 发表评论
]]>
揭开正则表达式的秘面纱http://m.tkk7.com/19851985lili/articles/97621.html☜♥☞MengChuChen☜♥☞MengChuChenFri, 02 Feb 2007 11:41:00 GMThttp://m.tkk7.com/19851985lili/articles/97621.htmlhttp://m.tkk7.com/19851985lili/comments/97621.htmlhttp://m.tkk7.com/19851985lili/articles/97621.html#Feedback0http://m.tkk7.com/19851985lili/comments/commentRss/97621.htmlhttp://m.tkk7.com/19851985lili/services/trackbacks/97621.html 引言

    正则表达式(regular expressionQ描qC一U字W串匚w的模式,可以用来Q(1Q检查一个串中是否含有符合某个规则的子串Qƈ且可以得到这个子ԌQ?Q根据匹配规则对字符串进行灵zȝ替换操作?br />
    正则表达式学习v来其实是很简单的Q不多的几个较ؓ抽象的概念也很容易理解。之所以很多h感觉正则表达式比较复杂,一斚w是因为大多数的文没有做到由入深地讲解Q概念上没有注意先后序Q给读者的理解带来困难Q另一斚wQ各U引擎自带的文一般都要介l它Ҏ的功能,然而这部分Ҏ的功能ƈ不是我们首先要理解的?br />
    文章中的每一个D例,都可以点击进入到试面q行试。闲话少_开始?/p>

1. 正则表达式规?/b>

1.1 普通字W?/b>

    字母、数字、汉字、下划线、以及后边章节中没有Ҏ定义的标点符P都是"普通字W?。表辑ּ中的普通字W,在匹配一个字W串的时候,匚w与之相同的一个字W?br />
    Q匹配结果是Q成功;匚w到的内容是:"c"Q匹配到的位|是Q开始于2Q结束于3。(注:下标?开始还是从1开始,因当前编E语a的不同而可能不同)

   
Q匹配结果是Q成功;匚w到的内容是:"bcd"Q匹配到的位|是Q开始于1Q结束于4?/p>


1.2 单的转义字符

    一些不便书写的字符Q采用在前面?"\" 的方法。这些字W其实我们都已经熟知了?/p>

表达?/p>

可匹?/p>

\r, \n

代表回R和换行符

\t

制表W?/p>

\\

代表 "\" 本n

    q有其他一些在后边章节中有Ҏ用处的标点符P在前面加 "\" 后,׃表该W号本n。比如:^, $ 都有Ҏ意义Q如果要惛_配字W串?"^" ?"$" 字符Q则表达式就需要写?"\^" ?"\$"?/p>

表达?/p>

可匹?/p>

\^

匚w ^ W号本n

\$

匚w $ W号本n

\.

匚w数点(.Q本w?/p>

    q些转义字符的匹配方法与 "普通字W? 是类似的。也是匹配与之相同的一个字W?br />
   
Q匹配结果是Q成功;匚w到的内容是:"$d"Q匹配到的位|是Q开始于3Q结束于5?/p>


1.3 能够?'多种字符' 匚w的表辑ּ

    正则表达式中的一些表C方法,可以匚w '多种字符' 其中的Q意一个字W。比如,表达?"\d" 可以匚wL一个数字。虽然可以匹配其中Q意字W,但是只能是一个,不是多个。这好比玩扑克牌时候,大小王可以代替Q意一张牌Q但是只能代替一张牌?/p>

表达?/p>

可匹?/p>

\d

L一个数字,0~9 中的L一?/p>

\w

L一个字母或数字或下划线Q也是 A~Z,a~z,0~9,_ 中Q意一?/p>

\s

包括I格、制表符、换늬{空白字W的其中L一?/p>

.

数点可以匹配除了换行符Q\nQ以外的L一个字W?/p>

    Q匹配的l果是:成功Q匹配到的内ҎQ?12"Q匹配到的位|是Q开始于3Q结束于5?br />
   
Q匹配的l果是:成功Q匹配到的内ҎQ?aa1"Q匹配到的位|是Q开始于1Q结束于4?/p>


1.4 自定义能够匹?'多种字符' 的表辑ּ

    使用Ҏ?[ ] 包含一pd字符Q能够匹配其中Q意一个字W。用 [^ ] 包含一pd字符Q则能够匚w其中字符之外的Q意一个字W。同L道理Q虽然可以匹配其中Q意一个,但是只能是一个,不是多个?/p>

表达?/p>

可匹?/p>

[ab5@]

匚w "a" ?"b" ?"5" ?"@"

[^abc]

匚w "a","b","c" 之外的Q意一个字W?/p>

[f-k]

匚w "f"~"k" 之间的Q意一个字?/p>

[^A-F0-3]

匚w "A"~"F","0"~"3" 之外的Q意一个字W?/p>

    Q匹配的l果是:成功Q匹配到的内ҎQ?bc"Q匹配到的位|是Q开始于1Q结束于3?br />
   
Q匹配的l果是:成功Q匹配到的内ҎQ?1"Q匹配到的位|是Q开始于3Q结束于4?/p>


1.5 修饰匚wơ数的特D符?/b>

    前面章节中讲到的表达式,无论是只能匹配一U字W的表达式,q是可以匚w多种字符其中L一个的表达式,都只能匹配一ơ。如果用表辑ּ再加上修饰匹配次数的ҎW号Q那么不用重复书写表辑ּ可以重复匹配?br />
    使用Ҏ是:"ơ数修饰"攑֜"被修饰的表达?后边。比如:"[bcd][bcd]" 可以写成 "[bcd]{2}"?/p>

表达?/p>

作用

{n}

表达式重复nơ,比如Q?a 相当?"\w\w"Q?a 相当?"aaaaa"

{m,n}

表达式至重复mơ,最多重复nơ,比如Q?a ba"?baa"?baaa"

{m,}

表达式至重复mơ,比如Q?a a12","_456","M12344"...

?

匚w表达?ơ或?ơ,相当?{0,1}Q比如:

+

表达式至出?ơ,相当?{1,}Q比如:

*

表达式不出现或出CQ意次Q相当于 {0,}Q比如:

    Q匹配的l果是:成功Q匹配到的内ҎQ?12.5"Q匹配到的位|是Q开始于10Q结束于14?br />
   
Q匹配的l果是:成功Q匹配到的内ҎQ?goooooogle"Q匹配到的位|是Q开始于7Q结束于17?/p>


1.6 其他一些代表抽象意义的ҎW号

    一些符号在表达式中代表抽象的特D意义:

表达?/p>

作用

^

与字W串开始的地方匚wQ不匚wM字符

$

与字W串l束的地方匹配,不匹配Q何字W?/p>

\b

匚w一个单词边界,也就是单词和I格之间的位|,不匹配Q何字W?/p>

    q一步的文字说明仍然比较抽象Q因此,举例帮助大家理解?br />
   
Q匹配结果是Q失败。因?"^" 要求与字W串开始的地方匚wQ因此,只有?"aaa" 位于字符串的开头的时候,"^aaa" 才能匚wQ?a >比如Q?aaa xxx xxx"?br />
    Q匹配结果是Q失败。因?"$" 要求与字W串l束的地方匹配,因此Q只有当 "aaa" 位于字符串的l尾的时候,"aaa$" 才能匚wQ?a >比如Q?xxx xxx aaa"?br />
        q一步说明:"\b" ?"^" ?"$" cMQ本w不匚wM字符Q但是它要求它在匚wl果中所处位|的左右两边Q其中一Ҏ "\w" 范围Q另一Ҏ ?\w" 的范围?br />
   
Q匹配结果是Q成功;匚w到的内容是:"end"Q匹配到的位|是Q开始于15Q结束于18?/p>

    一些符号可以媄响表辑ּ内部的子表达式之间的关系Q?/p>

表达?/p>

作用

|

左右两边表达式之?"? 关系Q匹配左Ҏ者右?/p>

( )

(1). 在被修饰匚wơ数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

    Q匹配结果是Q成功;匚w到的内容是:"Tom"Q匹配到的位|是Q开始于4Q结束于7。匹配下一个时Q匹配结果是Q成功;匚w到的内容是:"Jack"Q匹配到的位|时Q开始于15Q结束于19?br />
   
Q匹配结果是Q成功;匚w到内ҎQ?go go go"Q匹配到的位|是Q开始于6Q结束于14?br />
   
Q匹配的l果是:成功Q匹配到的内ҎQ?K?0.5"Q匹配到的位|是Q开始于6Q结束于10。单独获取括可围匹配到的内ҎQ?20.5"?/p>


2. 正则表达式中的一些高U规?/b>

2.1 匚wơ数中的贪婪与非贪婪

    在用修饰匹配次数的ҎW号Ӟ有几U表C方法可以同一个表辑ּ能够匚w不同的次敎ͼ比如Q?{m,n}", "{m,}", "?", "*", "+"Q具体匹配的ơ数随被匚w的字W串而定。这U重复匹配不定次数的表达式在匚wq程中,L可能多的匹配。比如,针对文本 "dxxxdxxxd"QD例如下:

表达?/p>

匚wl果

(d)(\w+)

"\w+" 匹配第一?"d" 之后的所有字W?"xxxdxxxd"

(d)(\w+)(d)

"\w+" 匹配第一?"d" 和最后一?"d" 之间的所有字W?"xxxdxxx"。虽?"\w+" 也能够匹配上最后一?"d"Q但是ؓ了整个表达式匹配成功,"\w+" 可以 "让出" 它本来能够匹配的最后一?"d"

    由此可见Q?\w+" 在匹配的时候,L可能多的匹配符合它规则的字W。虽然第二个举例中,它没有匹配最后一?"d"Q但那也是ؓ了让整个表达式能够匹配成功。同理,?"*" ?"{m,n}" 的表辑ּ都是可能地多匹配,?"?" 的表辑ּ在可匚w可不匚w的时候,也是可能的 "要匹?。这 U匹配原则就叫作 "贪婪" 模式 ?/p>

    非贪婪模式:

    在修饰匹配次数的ҎW号后再加上一?"?" P则可以匚wơ数不定的表辑ּ可能少的匹配,使可匚w可不匚w的表辑ּQ尽可能?"不匹?。这U匹配原则叫?"非贪? 模式Q也叫作 "勉强" 模式。如果少匚w׃D整个表达式匹配失败的时候,与贪婪模式类|非贪婪模式会最限度的再匹配一些,以整个表达式匹配成功。D例如下,针对文本 "dxxxdxxxd" 举例Q?/p>

表达?/p>

匚wl果

(d)(\w+?)

"\w+?" 尽可能的匚wW一?"d" 之后的字W,l果是:"\w+?" 只匹配了一?"x"

(d)(\w+?)(d)

Z让整个表辑ּ匚w成功Q?\w+?" 不得不匹?"xxx" 才可以让后边?"d" 匚wQ从而整个表达式匹配成功。因此,l果是:"\w+?" 匚w "xxx"

    更多的情况,举例如下Q?br />
   
Q匹配的l果是:成功Q匹配到的内Ҏ "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符Ԍ 表达式中?"</td>" 与字符串中最后一?"</td>" 匚w?

   
Q将只得?"<td><p>aa</p></td>"Q?再次匚w下一个时Q可以得到第二个 "<td><p>bb</p></td>"?/p>


2.2 反向引用 \1, \2...

    表达式在匚wӞ表达式引擎会小括号 "( )" 包含的表辑ּ所匚w到的字符串记录下来。在获取匚wl果的时候,括号包含的表达式所匚w到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界Ӟ必须使用括h指定所要的范围。比如前面的 "<td>(.*?)</td>"?br />
    其实Q?括号包含的表达式所匚w到的字符? 不仅是在匚wl束后才可以使用Q在匚wq程中也可以使用。表辑ּ后边的部分,可以引用前面 "括号内的子匹配已l匹配到的字W串"。引用方法是 "\" 加上一个数字?\1" 引用W?Ҏ号内匚w到的字符Ԍ"\2" 引用W?Ҏ号内匚w到的字符东y…以此类推,如果一Ҏ号内包含另一ҎP则外层的括号先排序号。换句话_哪一对的左括?"(" 在前Q那q一对就先排序号?/p>

    举例如下Q?br />
   
Q匹配结果是Q成功;匚w到的内容是:" 'Hello' "。再ơ匹配下一个时Q可以匹配到 " "World" "?br />
   
Q匹配结果是Q成功;匚w到的内容?"ccccc"。再ơ匹配下一个时Q将得到 999999999。这个表辑ּ要求 "\w" 范围的字W至重?ơ,?br />
   
Q匹配结果是成功。如?"<td>" ?"</td>" 不配对,则会匚wp|Q如果改成其他配对,也可以匹配成功?/p>


2.3 预搜索,不匹配;反向预搜索,不匹?/b>

    前面的章节中Q我讲到了几个代表抽象意义的ҎW号Q?^"Q?$"Q?\b"。它们都有一个共同点Q那是Q它们本w不匚wM字符Q只是对 "字符串的两头" 或?"字符之间的缝? 附加了一个条件。理解到q个概念以后Q本节将l箋介绍另外一U对 "两头" 或?"~隙" 附加条g的,更加灉|的表C方法?/p>

    正向预搜索:"(?=xxxxx)"Q?(?!xxxxx)"

    格式Q?(?=xxxxx)"Q在被匹配的字符串中Q它Ҏ处的 "~隙" 或?"两头" 附加的条件是Q所在缝隙的右侧Q必能够匹配上 xxxxx q部分的表达式。因为它只是在此作ؓq个~隙上附加的条gQ所以它q不影响后边的表辑ּȝ正匹配这个缝隙之后的字符。这q?"\b"Q本w不匚wM字符?\b" 只是所在缝隙之前、之后的字符取来q行了一下判断,不会影响后边的表辑ּ来真正的匚w?br />
   
Q将只匹?"Windows NT" 中的 "Windows "Q其他的 "Windows " 字样则不被匹配?br />
   
Q将可以匚w6?f"的前4个,可以匚w9?9"的前7个。这个表辑ּ可以读解成:重复4ơ以上的字母数字Q则匚w其剩下最?位之前的部分。当Ӟq个表达式可以不q样写,在此的目的是作ؓ演示之用?/p>

    格式Q?(?!xxxxx)"Q所在缝隙的右侧Q必M能匹?xxxxx q部分表辑ּ?br />
   
Q将从头一直匹配到 "stop" 之前的位|,如果字符串中没有 "stop"Q则匚w整个字符丌Ӏ?br />
   
Q只能匹?"do"。在本条举例中,"do" 后边使用 "(?!\w)" 和?"\b" 效果是一L?/p>

    反向预搜索:"(?<=xxxxx)"Q?(?<!xxxxx)"

    q两U格式的概念和正向预搜烦是类似的Q反向预搜烦要求的条件是Q所在缝隙的 "左侧"Q两U格式分别要求必能够匹配和必须不能够匹配指定表辑ּQ而不是去判断右侧。与 "正向预搜? 一L是:它们都是Ҏ在缝隙的一U附加条Ӟ本n都不匚wM字符?br />
    举例5Q表辑ּ "(?<=\d{4})\d+(?=\d{4})" 在匹?"1234567890123456" Ӟ匹配除了前4个数字和?个数字之外的中间8个数字。由?JScript.RegExp 不支持反向预搜烦Q因此,本条举例不能够进行演C。很多其他的引擎可以支持反向预搜索,比如QJava 1.4 以上?java.util.regex 包,.NET 中System.Text.RegularExpressions 命名I间Qboost::regex 以及
GRETA 正则表达式库{?/p>


3. 其他通用规则

    q有一些在各个正则表达式引擎之间比较通用的规则,在前面的讲解q程中没有提到?/p>

3.1 表达式中Q可以?"\xXX" ?"\uXXXX" 表示一个字W("X" 表示一个十六进制数Q?/p>

形式

字符范围

\xXX

~号?0 ~ 255 范围的字W,比如Q?a \x20" 表示

\uXXXX

M字符可以使用 "\u" 再加上其~号?位十六进制数表示Q比如:

3.2 在表辑ּ "\s"Q?\d"Q?\w"Q?\b" 表示Ҏ意义的同Ӟ对应的大写字母表C相反的意义

表达?/p>

可匹?/p>

\S

\D

匚w所有的非数字字W?/a>

\W

匚w所有的字母、数字、下划线以外的字W?/a>

\B

3.3 在表辑ּ中有Ҏ意义Q需要添?"\" 才能匚w该字W本w的字符汇?/p>

字符

说明

^

匚w输入字符串的开始位|。要匚w "^" 字符本nQ请使用 "\^"

$

匚w输入字符串的l尾位置。要匚w "$" 字符本nQ请使用 "\$"

( )

标记一个子表达式的开始和l束位置。要匚w括P请?"\(" ?"\)"

[ ]

用来自定义能够匹?'多种字符' 的表辑ּ。要匚w中括P请?"\[" ?"\]"

{ }

修饰匚wơ数的符受要匚w大括P请?"\{" ?"\}"

.

匚w除了换行W(\nQ以外的L一个字W。要匚w数Ҏw,请?"\."

?

修饰匚wơ数?0 ơ或 1 ơ。要匚w "?" 字符本nQ请使用 "\?"

+

修饰匚wơ数?1 ơ。要匚w "+" 字符本nQ请使用 "\+"

*

修饰匚wơ数?0 ơ或Lơ。要匚w "*" 字符本nQ请使用 "\*"

|

左右两边表达式之?"? 关系。匹?"|" 本nQ请使用 "\|"

3.4 括号 "( )" 内的子表辑ּQ如果希望匹配结果不q行记录供以后用,可以使用 "(?:xxxxx)" 格式

    举例1Q表辑ּ "(?:(\w)\1)+" 匚w "a bbccdd efg" ?/a>Q结果是 "bbccdd"。括?"(?:)" 范围的匹配结果不q行记录Q因?"(\w)" 使用 "\1" 来引用?/p>

3.5 常用的表辑ּ属性设|简介:IgnorecaseQSinglelineQMultilineQGlobal

表达式属?/p>

说明

Ignorecase

默认情况下,表达式中的字母是要区分大写的。配|ؓ Ignorecase 可匚w时不区分大小写。有的表辑ּ引擎Q把 "大小? 概念延?UNICODE 范围的大写?/p>

Singleline

默认情况下,数?"." 匚w除了换行W(\nQ以外的字符。配|ؓ Singleline 可ɞ数点可匚w包括换行W在内的所有字W?/p>

Multiline

默认情况下,表达?"^" ?"$" 只匹配字W串的开??和结??位置。如Q?br />
①xxxxxxxxx②\n
③xxxxxxxxx?br />
配置?Multiline 可以?"^" q可以匹配换行符之后Q下一行开始前 ?的位|,?"$" q可以匹配换行符之前Q一行结??的位|?/p>

Global

主要在将表达式用来替换时起作用,配置?Global 表示替换所有的匚w?/p>


4. l合提示

4.1 如果要要求表辑ּ所匚w的内Ҏ整个字符Ԍ而不是从字符串中找一部分Q那么可以在表达式的首尾使用 "^" ?"$"Q比如:"^\d+$" 要求整个字符串只有数字?/p>

4.2 如果要求匚w的内Ҏ一个完整的单词Q而不会是单词的一部分Q那么在表达式首?"\b"Q比如:?/p>

4.3 表达式不要匹配空字符丌Ӏ否则会一直得到匹配成功,而结果什么都没有匚w到。比如:准备写一个匹?"123"?123."?123.5"?.5" q几UŞ式的表达式时Q整数、小数点、小数数字都可以省略Q但是不要将表达式写成:"\d*\.?\d*"Q因为如果什么都没有Q这个表辑ּ也可以匹配成功?a ?/p>

4.4 能匹配空字符串的子匹配不要@环无限次。如果括号内的子表达式中的每一部分都可以匹?0 ơ,而这个括h体又可以匚w无限ơ,那么情况可能比上一条所说的更严重,匚wq程中可能死循环。虽然现在有些正则表辑ּ引擎已经通过办法避免了这U情况出现死循环了,比如 .NET 的正则表辑ּQ但是我们仍然应该尽量避免出现这U情c如果我们在写表辑ּ旉Cd@环,也可以从q一点入手,查找一下是否是本条所说的原因?/p>

4.5 合理选择贪婪模式与非贪婪模式?/p>

4.6 ?"|" 的左右两边,Ҏ个字W最好只有一边可以匹配,q样Q不会因?"|" 两边的表辑ּ因ؓ交换位置而有所不同?/p>

 

1Q基本描q?br />

1.1 Ҏ{֐QoNewWindow = window.open( sURL , sName , sFeatures, bReplace)
通过Ҏ{֐可以看出Qwindow.open在打开一个窗?其url为sURL)后,返回一个代表该H口对象的一个变?br />oNewWindowQ如果打开不成功,则oNewWindow的gؓnull。同时ؓ了对打开的窗口预先做一些控Ӟ提供?br />其他一些参敎ͼsName、sFeatures、bReplaceQ可供选择配置Q下面将具体说明每个参数的含?br />

1.2 各参数的含义

  • oNewWindowQ被打开的窗口的对象
  • sUrlQ被打开H口的url
  • sNameQ在哪个H口打开新的url链接Q例如可以ؓ_blankQ新H口Q、_topQ最外层H口Q等{?
  • sFeaturesQ对H口的一些控制属?
    • fullscreenQ是否ؓ全屏模式Q相当于F11的效果)Q可取|yes/1、no/0
    • directoriesQ是否带有目录按钮(例如收藏夹中?链接'目录Q,可取值同?
    • locationQ是否带有地址栏,可取值同?
    • channelmodeQ是否ؓ影院模式Q可取值同?
    • menubarQ是否带有菜单条Q可取值同?
    • resizableQ是否可以改变窗口的寸Q可取值同?
    • scrollbarsQ是否带有滚动条Q可取值同?
    • statusQ是否带有状态栏Q可取值同?
    • titlebarQ是否带有标题栏Q可取值同?
    • toolbarQ是否带有快捷工hQ可取值同?
    • heightQ窗口高?
    • widthQ窗口宽?
    • topQ距屏幕上边~的距离
    • leftQ距屏幕左边~的距离
  • bReplaceQ如果在同一H口打开新窗口,该值用于指定是否在history中替换原H口的url链接Q可取|true/false

 

2Q基本?/font>

  • 在一个新H口中打开某个链接link(/myoa/admin/manage.jsp)

     window.open ( "/myoa/admin/manage.jsp" ) ;
     或?/font>
     window.open ( "/myoa/admin/manage.jsp" , "_blank" ) ;
     注意Q这L话,每次执行都会打开一个新H口Q即使上ơ打开的新H口未关闭,仍然会弹出新?/font>
  • 在指定的某个H口中打开某个链接linkQ?myoa/admin/manage.jspQ?

     window.open ( "/myoa/admin/manage.jsp" , "myWiddown" ) ; //myWindow即ؓH口的名U?/font>
     注意Q如果myWindowH口不存在,那么会新弹Z个窗口,q将新窗口命名ؓmyWindowQ只要该H口
      不关闭,那么以后执行该openQ弹出窗口均个已l存在的myWindow
    另外Q有一些窗口名U已l被览器用,hҎ的含义,例如Q_blank、_top、_parent、_self{?/font>
  • 打开一个新H口Q要求窗口高?00px、宽?00px、不带滚动条、不带地址栏(/myoa/admin/manage.jspQ?

    window.open ( "/myoa/admin/manage.jsp" , "_blank" , "height=300,width=500,scrollbars=no,location=no" ) ;
    注意QsFeaturesq些参数之间是用逗号分隔的,而在window.showModalDialog中,是用分号q行分隔的,一定要注意Q?/font>

 

3Q高U部?/font>

  • 原窗口与弹出H口之间的对象定?
    • 概述Q弹出窗口是我们在页面编E中l常使用的一U方式,从互动角度分析,弹出H口主要有两U类型,一U是信息昄H口Q例如h员信息、文章信息等{;另外一U是l箋处理H口Q例如有些项目中Q新建文章就是弹出窗口来完成的。对于信息显C窗口,用户看完之后关闭可以了Q但是对于l处理窗口,在用Ll处理之后,往往需要与原窗口进行户动,例如当在新窗口中创徏一文章提交后Q希望在弹出H口关闭的同Ӟ原窗口能够刷新等{?
    • 解决方式Q上面方式的一个关键就是,如何获取原窗口与弹出H口对象Q在DOM模型中我们可以明的看到Q?
      • 原窗口中获取弹出H口对象Q?

    var infoWindow=window.open ( "create.jsp" , "_blank" , "width=500,height=400" ) ;
    //infoWindow即代表了弹出H口的window对象Q例如在弹出H口中有一个表?myForm)和表单中的一个输入控?username)Q我们可以这h作:
    infoWindow.document.myForm.username.value= "lisi" ;
    • 弹出H口中获取原H口对象Q?

    如上例,在create.jsp中,我们可以如下操作来刷新原H口
    opener.location.reload () ;
   //opener是DOM中提供的一个默认对象,表示的就是某个窗口的原窗口?/font>
  • wondow.open的缓存处?
    • 概述Q如果window.open链接的target指定的是一个已l存在了的窗口,其是原面中的一个frame和iframe的话Q此时window.open打开的链接页面将不会从服务器重新hQ而是使用览器中相应的缓存页面,臛_ielh的感觉就是这LQ例如:

    <input type= "button"  value= "昄列表"  onclick= "window.open('/myoa/users/list.jsp','main','')" />
    <hr>
    <iframe name= "main"  src= "/myoa/users/list.jsp"  width= "100%"  height= "600"  frameborder= "0" ></iframe>
    W一ơ方式该面是可以看C个列表,那么此时即新创Z条记录,那么再点几Z显C列表”按钮时Q会发现列表没有发生变化Q此时关闭浏览器重新q行发现列表出现了刚创徏的那条记录,可见~存起了作用?/font>
    • 解决办法Q实验中我们发现Q?a>中导向链接不会发生上面的现象Q每ơ都是重新请求,同样是上面的例子Q用下面的方式是可以的:

    <a href= "/myoa/users/list.jsp"  target= "main" >昄列表</a>
    <hr>
    <iframe name= "main"  src= "/myoa/users/list.jsp"  width= "100%"  height= "600"  frameborder= "0" ></iframe>

不过有许多时候,我们不的不用window.open到本面某个iframe的方式(以后你可能会到的)Q那么可以类q样解决Q?


    <input type= "button"  value= "昄列表"  onclick= "document.getElementById('showlist').click()" />
    <a href= "/myoa/users/list.jsp"  target= "main"  id= "showlist"  style= "display:none" >昄列表</a>
    <hr>
    <iframe name= "main"  src= "/myoa/users/list.jsp"  width= "100%"  height= "600"  frameborder= "0" ></iframe>
    上面的找个例子比较简单,在实际的目中,在隐藏的link被触发之前,q需要做许多的javascipt工作?/font>


]]>
jshttp://m.tkk7.com/19851985lili/articles/97620.html☜♥☞MengChuChen☜♥☞MengChuChenFri, 02 Feb 2007 11:38:00 GMThttp://m.tkk7.com/19851985lili/articles/97620.htmlhttp://m.tkk7.com/19851985lili/comments/97620.htmlhttp://m.tkk7.com/19851985lili/articles/97620.html#Feedback0http://m.tkk7.com/19851985lili/comments/commentRss/97620.htmlhttp://m.tkk7.com/19851985lili/services/trackbacks/97620.html 三道试题:
1Q?var str=?abbbbacc?
var rs=str.replace(“a???;   
(A)0bbbbacc (B)0bbbb0cc
2Qvar str=?abbbbacc?
var rs=str.replace(?a/???;   
(A)0bbbbacc (B)0bbbb0cc
3Qvar str=?abbbbacc?
var rs=str.replace(?a/g???;   
(A)0bbbbacc (B)0bbbb0cc
附注QString对象的replaceҎ{֐为:
replace(regx,str)

一Q概q?/font>

1Q正则表辑ּQ可以说是Q何一U编E语a都提供的机制Q它主要是提供了对字W串的处理能力?br />2Q正则表辑ּ在页面处理中的用场景:
1Q表单验证。验证某些域W合某种规则Q例如邮件输入框必须输入的是邮g、联pȝ话输入框输入的必L数字{等
2Q处理DOM模型。例如通过表达式定位DOM中的一个对象或一pd对象Q一个例子就是定位id属性中含有某个Ҏ字符的div对象?br />3Q纯~程逻辑。直接用于编E的逻辑之中?br />3Q说明:本部分所丄正则表达式的代码片断Q都是经q测试的Q但有一炚w要注意,对于换行的字W串的定义,我们在表q时使用的是cM如下的Ş式:
var str=“It’s is
 a  beautiful city”;
q种形式直接写在JS代码中是错误的,那如何获取具有换行的字符串呢Q简单的办法Q在textarea中输入文本ƈ换行Q然后将该DlJS变量卛_。例如:
var str=document.forms[0].mytextarea.value;         

二,语法与?/font>

1Q定义正则表辑ּ

1Q定义正则表辑ּ有两UŞ式,一U是普通方式,一U是构造函数方式?br />2Q普通方式:var reg=/表达?附加参数
表达式:一个字W串Q代表了某种规则Q其中可以用某些特D字W,来代表特D的规则Q后面会详细说明?br />附加参数Q用来扩展表辑ּ的含义,目前主要有三个参敎ͼ
gQ代表可以进行全局匚w?br />iQ代表不区分大小写匹配?br />mQ代表可以进行多行匹配?br />上面三个参数Q可以Q意组合,代表复合含义Q当然也可以不加参数?br />例子Q?br />var reg=/a*b/;
var reg=/abc+f/g;
3Q构造函数方式:var reg=new RegExp(“表辑ּ?”附加参数?;
其中“表辑ּ”与“附加参数”的含义与上面U定义方式中的含义相同?br />例子Q?br />var reg=new RegExp(“a*b?;
var reg=new RegExp(“abc+f?”g?;
4Q普通方式与构造函数方式的区别
普通方式中的表辑ּ必须是一个常量字W串Q而构造函C的表辑ּ可以是常量字W串Q也可以是一个js变量Q例如根据用L输入来作辑ּ参数{等Q?br />var reg=new RegExp(document.forms[0].exprfiled.value,”g?;

2Q表辑ּ模式

1Q表辑ּ模式Q是指表辑ּ的表达方式与样式Q??var reg=/表达?附加参数 中的“表辑ּ”怎样Lqͼ
2Q从规范上讲Q表辑ּ模式分ؓ单模式和复合模式?br />3Q简单模式:是指通过普通字W的l合来表辄模式Q例?br />var reg=/abc0d/;
可见单模式只能表C具体的匚w?br />4Q复合模式:是指含有通配W来表达的模式,例如Q?br />var reg=/a+b?\w/;
其中??和\w都属于通配W,代表着Ҏ的含义。因此复合模式可以表达更为抽象化的逻辑?br />下面我们着重说一下复合模式中各个通配W的含义及其使用?br />5)复合模式中特D字W的讲解Q?/p>

1>\Q在许多~程语言里面被用作{义符Q一般来?br />\W号后面如果跟的是普通字WcQ那么\c׃表特D的含义Q例如n本来代表字符nQ但\n׃表换行?br />\W号后面如果跟的是特D字WcQ那么\c׃表普通字WcQ例如\一般用作{义符Q但\\则调表普通字W\?br />Javascript的正则表辑ּ中\的用法与上面相同Q只是不同的~程语言Q特D字W表可能不太一LŞ了?/p>

2>^Q匹配输入字W串的v始端Q如果是多行匚wQ即表达式的附加参数中含有mQ则也在一个换行符后匹配?br />例子Q?^B/匚w “Bab Bc ”中的第一个B
例子2Q?^B/gm匚w
          “Badd B
          cdaf
          B dsfB?br />          中的W一行第一个BQ第三行中的W一个B
         
3>$Q匹配输入字W创的尾端,如果是多行匹配,卌辑ּ的附加参C含有mQ则也在一个换行符前匹配?br />与^的用法相反?br />例子Q?t$/匚w“bat”中的tQ但是不匚w“hate”中的t
例子2Q?t$/匚w
“tag at
bat?br />中第一行的最后一个t和第二行的t?/p>

4>*Q匹配前一个字W?ơ或多次?br />例子Q?ab*/匚w“dddabbbbc”中的“abbbb”,也匹配“ddda”中的“a?/p>

5>+Q匹配前一个字W?ơ或多次?br />例子Q?ab+/匚w“dddabbbbc”中的“abbbb”,但不匚w“ddda?br />与后面的{1,}Q原型:{n,}Q的用法cM

6>?Q?的用法比较特D,一般来说它用来对前一个字W做0ơ或1ơ匹配,但是它有另外两种Ҏ的用法:
如果紧跟???和{ }之后Q则表示原始匚w的最次数匹配,例如Q?br />/ba*/本来匚w“bbbaaaa”中的“baaaa”,但是/ba*?/则匹配“bbbaaaa”中的“b”(因ؓ*表示0ơ或多次匚wQ而加?应该表示最次数匹配,?ơ匹配)?br />同理Q?ba+?/则匹配“baaaa”中的“ba”?br />作ؓ语法l构W号Q用于前置断言中,卛_面要说到的x(?=y)和x(?!=y)

7>.Q小数点中的?”号Q匹配Q何一个单独的字符Q但是换行符除外?br />标准中d有哪些字W?请参考:字符?br />例如Q?a.b/匚w“acbaa”中的“acb”,但是不匹配“abbb”?/p>

8>(x)Q表C匹配x(qҎ字符x或者特指一个字W,x表示一个字W串)Q而且匚w会被CQ在语法中这U?)被称为“capturing parentheses ”,x捉用的小括号?br />匚w会被CQ是因ؓ在表辑ּ提供的函CQ有些函数返回一个数l,该数l会保存所匚w的所有字W串Q例如exec()函数?br />另外q要注意()中的x被记住的前提是匹配x?br />例子1Q?br />var regx=/a(b)c/;
var rs=regx.exec(“abcddd?;
从上面可以看?/a(b)c/匚w“abcddd”中的“abc”,因ؓ()的原因,b也会记录下来Q因此rsq回的数字内容ؓQ?br />{abc,b}
例子2Q?br /> var regx=/a(b)c/;
 var rs=regx.exec(“acbcddd?;
 rsq回nullQ因?a(b)c/不匹配“acbcddd”,所?)中的b不会被记录下来(管字符串中含有bQ?br /> 
9>(?:x)Q匹配xQ但不会CxQ这U格式中?)被称为“non-capturing parentheses ”,即非捕捉用的括受?br />例子Q?br />var regx=/a(?:b)c/;
var rs=regx.exec(“abcddd?;
从上面可以看?/a(?:b)c/匚w“abcddd”中的“abc”,因ؓ(?:)的原因,b不会记录下来Q因此rsq回的数字内容ؓQ?br />{abc}

10>X(?=y)Q匹配xQ仅当后面紧跟着y时。如果符合匹配,则只有x会被CQy不会被记住?br />例子Q?br />var regx=/user(?=name)/;
var rs=regx.exec(“The username is Mary?;
l果Q匹配成功,而且rs的gؓ{user}

11>X(?!y)Q匹配xQ仅当后面不紧跟着y时。如果符合匹配,则只有x会被CQy不会被记住?br />例子Q?br />var regx=/user(?!name)/;
var rs=regx.exec(“The user name is Mary?;
l果Q匹配成功,而且rs的gؓ{user}
例子2Q?br />var regx=/\d+(?!\.)/;
var rs=regx.exec(?4.235?;
l果Q匹配成果,rs的gؓ{5}Q不匚w54是因?4后面跟着?”号Q当?35也匹配,但是׃execҎ的行为,235不会被返?/p>

12>x|yQ匹配x或y。注意如果x和y都匹配上了,那么只记住x?br />例子Q?br />var regx=/beijing|shanghai/;
var rs=regx.exec(“I love beijing and shanghai?;
l果Q匹配成功,rs的gؓ{beijing}Q虽然shanghai也匹配,但不会被C?/p>

13>{n}Q匹配前一个字W的nơ出现?br />n必须是一个非负数Q当然如果是一个负数或数也不会报语法错误?br />例子Q?br />var regx=/ab{2}c/;
var rs=regx.exec(“abbcd?;
l果Q匹配成功,rs的gؓQ{abbc}?/p>

14>{n,}Q匹配前一个字W的臛_nơ出现?br />例子Q?br />var regx=/ab{2,}c/;
var rs=regx.exec(“abbcdabbbc?;
l果Q匹配成功,rs的gؓQ{abbc}。注意ؓ什么abbbc也符合条件ؓ什么没有被CQ这与execҎ的行为有养I后面会统一讲解?/p>

15>{n,m}Q匹配前一个字W的臛_nơ最多mơ的出现?br />只要n与m为数字,而且m>=n׃会报语法错误?br />例子Q?br />var regx=/ab{2,5}c/;
var rs=regx.exec(“abbbcd?;
l果Q匹配成功,rs的gؓQ{abbbc}?br />例子2Q?br />var regx=/ab{2,2}c/;
var rs=regx.exec(“abbcd?;
l果Q匹配成功,rs的gؓQ{abbc}?br />例子3Q?br />var regx=/ab(2,5)/;
var rs=regx.exec(“abbbbbbbbbb?;
l果Q匹配成功,rs的gؓQ{abbbbb}Q这说明Q如果前一个字W出现多于mơ,则只匚wmơ。另外:
var regx=/ab(2,5)c/;
var rs=regx.exec(“abbbbbbbbbbc?;
l果Q匹配失败,rs的gؓQnullQؓ什么匹配失败,因ؓb多于5个则b(2,5)会匹配前5个bQ,而表辑ּ/ab(2,5)c/中b后面是cQ但字符串中5个b之后q是b所以会报错?/p>

16>[xyz]Qxyz表示一个字W串Q该模式表示匚w[]中的一个字W,形式上[xyz]{同于[x-z]?br />例子Q?br />var regx=/a[bc]d/;
var rs=regx.exec(“abddgg?;
l果Q匹配成功,rs的gؓQ{abd}
例子2Q?br />var regx=/a[bc]d/;
var rs=regx.exec(“abcd?;
l果Q匹配失败,rs的gؓQnullQ之所以失败,是因为[bc]表示匚wb或c中的一个,但不会同时匹配?/p>

17>[^xyz]Q该模式表示匚w非[]中的一个字W,形式上[^xyz]{同于[^x-z]?br />例子Q?br />var regx=/a[^bc]d/;
var rs=regx.exec(“afddgg?;
l果Q匹配成功,rs的gؓQ{afd}
例子2Q?br />var regx=/a[^bc]d/;
var rs=regx.exec(“abd?;
l果Q匹配失败,rs的gؓQ?/p>

18>[\b]Q匹配退格键?/p>

19>\bQ匹配一个词的边界符Q例如空格和换行W等{,当然匚w换行W时Q表辑ּ应该附加参数m?br />例子Q?br />var regx=/\bc./;
var rs=regx.exec(“Beijing is a beautiful city?;
l果Q匹配成功,rs的gؓQ{ci}Q注意c前边的空g会匹配到l果中,即{ ci}是不正确的?/p>

20>\BQ代表一个非单词边界?br />例子Q?br />var regx=/\Bi./;
var rs=regx.exec(“Beijing is a beautiful city?;
l果Q匹配成功,rs的gؓQ{ij}Q即匚w了Beijing中的ij?/p>

21>\cXQ匹配一个控制字W。例如, \cM 匚w一?Control-M ?
回RW?x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一
个原义的 ’c?字符。(实际的例子还需补充Q?

21>\dQ匹配一个数字字W,{同于[0-9]?br />例子Q?br />var regx=/user\d/;
var rs=regx.exec(“user1?;
l果Q匹配成功,rs的gؓQ{user1}

22>\DQ匹配一个非数字字符Q等同于[^0-9]?br />例子Q?br />var regx=/user\D/;
var rs=regx.exec(“userA?;
l果Q匹配成功,rs的gؓQ{userA}

23>\fQ匹配一个换늬?/p>

24>\nQ匹配一个换行符。因为是换行W,所以在表达式中要加入m参数?br />例子Q?br />var regx=/a\nbc/m;
       var str=“a
               bc?
       var rs=regx.exec(str);
       l果Q匹配成功,rs的gؓQ{  }Q如果表辑ּ?a\n\rbc/Q则不会被匹配,因此在一般的~辑器中一个”Enter”键代表着“回车换行”,而非“换行回车”,臛_在textarea域中是这L。     ?
25>\rQ匹配一个回车符

26>\sQ匹配一个空格符Q等同于[ \f\n\r\t\v\u00A0\u2028\u2029].
例子Q?br />var regx=/\si/;
var rs=regx.exec(“Beijing is a city?;
l果Q匹配成功,rs的gؓQ{ i}

27>\SQ匹配一个非I格W,{同于[ ^\f\n\r\t\v\u00A0\u2028\u2029].
例子Q?br />var regx=/\Si/;
var rs=regx.exec(“Beijing is a city?;
l果Q匹配成功,rs的gؓQ{ei}

28>\tQ匹配一个tab
例子Q?br />var regx=/a\tb/;
var rs=regx.exec(“a bc?;
l果Q匹配成功,rs的gؓQ?{a       bc}

29>\vQ匹配一个竖向的tab

30>\wQ匹配一个数字、_或字母表字符Q即[A-Za-z0-9_ ]?br />例子Q?br />var regx=/\w/;
var rs=regx.exec(?25.23?;
l果Q匹配成功,rs的gؓQ{2}

31>\WQ匹配一个非数字、_或字母表字符Q即[^A-Za-z0-9_ ]?br />例子Q?br />var regx=/\w/;
var rs=regx.exec(?25.23?;
l果Q匹配成功,rs的gؓQ{$}

32>\nQ注意不是\nQ这里n是一个正整数Q表C匹配第n?)中的字符?br />例子Q?br />var regx=/user([,-])group\1role/;
var rs=regx.exec(“user-group-role?;
l果Q匹配成功,rs的gؓQ{user-group-role,-}Q同样对user,group,role的匹配也是成功的Q但像user-group,role{就不对了?/p>

33>\0Q匹配一个NUL字符?/p>

34>\xhhQ匹配一个由两位16q制数字所表达的字W?/p>

35>\uhhhhQ匹配一个由四位16q制数字所表达的字W?/p>


3Q表辑ּ操作

1Q表辑ּ操作Q在q里是指和表辑ּ相关的方法,我们介l六个方法?br />2Q表辑ּ对象QRegExpQ方法:

1>exec(str)Q返回str中与表达式相匚w的第一个字W串Q而且以数l的形式表现Q当然如果表辑ּ中含有捕捉用的小括号Q则q回的数l中也可能含?)中的匚w字符Ԍ例如Q?br />var regx=/\d+/;
var rs=regx.exec(?432ddf53?;
q回的rsgؓQ{3432}
var regx2=new RegExp(“ab(\d+)c?;
var rs2=regx2.exec(“ab234c44?;
q回的rsgؓQ{ab234c,234}
另外Q如果有多个合适的匚wQ则W一ơ执行execq回一个第一个匹配,此时l箋执行execQ则依次q回W二个第三个匚w。例如:
var regx=/user\d/g;
var rs=regx.exec(“ddduser1dsfuser2dd?;
var rs1=regx.exec(“ddduser1dsfuser2dd?;
则rs的gؓ{user1}Qrs的gؓ{rs2}Q当然注意regx中的g参数是必ȝQ否则无论exec执行多少ơ,都返回第一个匹配。后面还有相兛_Ҏ及到Ҏ惌的解释?/p>

2>test(str)Q判断字W串str是否匚w表达式,q回一个布倹{例如:
var regx=/user\d+/g;
var flag=regx.test(“user12dd?;
flag的gؓtrue?/p>

3QString对象Ҏ

1>match(expr)Q返回与expr相匹配的一个字W串数组Q如果没有加参数gQ则q回W一个匹配,加入参数g则返回所有的匚w
例子Q?br />var regx=/user\d/g;
var str=“user13userddduser345?
var rs=str.match(regx);
rs的gؓQ{user1,user3}

2>search(expr)Q返回字W串中与expr相匹配的W一个匹配的index倹{?br />例子Q?br />var regx=/user\d/g;
var str=“user13userddduser345?
var rs=str.search(regx);
rs的gؓQ?

3>replace(expr,str)Q将字符串中匚wexpr的部分替换ؓstr。另外在replaceҎ中,str中可以含有一U变量符?Q格式ؓ$nQ代表匹配中被记住的Wn的匹配字W串Q注意小括号可以记忆匚wQ?br />例子Q?br />var regx=/user\d/g;
var str=“user13userddduser345?
var rs=str.replace(regx,?0?;
rs的gؓQ?03userddd0045
例子2Q?br />var regx=/u(se)r\d/g;
var str=“user13userddduser345?
var rs=str.replace(regx,?1?;
rs的gؓQse3userdddse45
对于replace(expr,str)Ҏq要特别注意一点,如果expr是一个表辑ּ对象则会q行全局替换Q此时表辑ּ必须附加参数gQ否则也只是替换W一个匹配)Q如果expr是一个字W串对象Q则只会替换W一个匹配的部分Q例如:
var regx=“user?br />var str=“user13userddduser345?
var rs=str.replace(regx,?0?;
rs的gؓQ?0013userddduser345

4>split(expr)Q将字符串以匚wexpr的部分做分割Q返回一个数l,而且表达式是否附加参数g都没有关p,l果是一L?br />例子Q?br />var regx=/user\d/g;
var str=“user13userddduser345?
var rs=str.split(regx);
rs的gؓQ{3userddd,45}

4Q表辑ּ相关属?/strong>

1Q表辑ּ相关属性,是指和表辑ּ相关的属性,如下面的形式Q?br />var regx=/myexpr/;
var rs=regx.exec(str);
其中Q和表达式自wregx相关的属性有两个Q和表达式匹配结果rs相关的属性有三个Q下面将逐一介绍?br />2Q和表达式自w相关的两个属性:

1>lastIndexQ返回开始下一个匹配的位置Q注意必L全局匚wQ表辑ּ中带有g参数Q时QlastIndex才会有不断返回下一个匹配|否则该gؓLq回W一个下一个匹配位|,例如Q?br />var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2?;
var lastIndex1=regx.lastIndex;
rs=regx.exec(“sdsfuser1dfsfuser2?;
var lastIndex2=regx.lastIndex;
rs=regx.exec(“sdsfuser1dfsfuser2?;
var lastIndex3=regx.lastIndex;
上面lastIndex1?Q第二个lastIndex2也ؓ9Q第三个也是9Q如果regx=/user\d/gQ则W一个ؓ9Q第二个?8Q第三个??/p>

2>sourceQ返回表辑ּ字符串自w。例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2?;
var source=regx.source;
source的gؓuser\d
3Q和匚wl果相关的三个属性:

1>indexQ返回当前匹配的位置。例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2?;
var index1=rs.index;
rs=regx.exec(“sdsfuser1dfsfuser2?;
var index2=rs.index;
rs=regx.exec(“sdsfuser1dfsfuser2?;
var index3=rs.index;
index1?Qindex2?Qindex3?Q如果表辑ּ加入参数gQ则index1?Qindex2?3Qindex3会报错(index为空或不是对象)?/p>

2>inputQ用于匹配的字符丌Ӏ例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2?;
var input=rs.input;
input的gؓsdsfuser1dfsfuser2?/p>

3>[0]Q返回匹配结果中的第一个匹配|对于match而言可能q回一个多值的数字Q则除了[0]外,q可以取[1]、[2]{等。例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2?;
var value1=rs[0];
rs=regx.exec(“sdsfuser1dfsfuser2?;
var value2=rs[0];
value1的gؓuser1,value2的gؓuser2

5Q实际应?/strong>

1Q实际应用一
描述Q有一表单Q其中有一个“用户名”input?br />要求Q汉字,而且不能于2个汉字,不能多于4个汉字?br />实现Q?br /><script>
function checkForm(obj){
     var username=obj.username.value;
     var regx=/^[\u4e00-\u9fa5]{2,4}$/g
     if(!regx.test(username)){
               alert(“Invalid username!?;
               return false;
     }
     return true;
}
</script>
<form name=“myForm”onSubmit=“return checkForm(this)?gt;
    <input type=“text?name=“username?>
    <input type=“submit?vlaue=“submit?>
</form>
2Q实际应用二
描述Q给定一个含有html标记的字W串Q要求将其中的html标记L?br />实现Q?br /><script>
function toPlainText(htmlStr){
     var regx=/<[^>]*>|<\/[^>]*>/gm;
     var str=htmlStr.replace(regx,"");
     return str;
}
</script>
<form name=“myForm?gt;
    <textarea id=“htmlInput?gt;</textarea>
    <input type=“button?value=“submit?onclick=“toPlainText(document.getElementById(‘htmlInput?.value?>
</form>

三,结

1QJavascript正则表达式,我想在一般的E序员之中,使用者应该不是很多,因ؓ我们处理的页面一般都不是很复杂,而复杂的逻辑一般我们都在后台处理完成了。但是目前趋势已l出C扭{Q富客户端已l被来多的h接受Q而Javascript是其中的关键技术,对于复杂的客L逻辑而言Q正则表辑ּ的作用也是很关键的,同时它也是Javascript高手必须要掌握的重要技术之一。?/p>

2Qؓ了能够便于大家对前面讲述的内Ҏ一个更为综合和深刻的认识,我将前面的一些关键点和容易犯p涂的地方再pȝȝ一下,q部分很关键Q?br />ȝ1Q附件参数g的用?/strong>
表达式加上参数g之后Q表明可以进行全局匚wQ注意这里“可以”的含义。我们详l叙qͼ
1Q对于表辑ּ对象的execҎQ不加入gQ则只返回第一个匹配,无论执行多少ơ均是如此,如果加入gQ则W一ơ执行也q回W一个匹配,再执行返回第二个匚wQ依ơ类推。例?br />var regx=/user\d/;
var str=“user18dsdfuser2dsfsd?
var rs=regx.exec(str);//此时rs的gؓ{user1}
var rs2=regx.exec(str);//此时rs的g然ؓ{user1}
如果regx=/user\d/gQ则rs的gؓ{user1}Qrs2的gؓ{user2}
通过q个例子说明Q对于execҎQ表辑ּ加入了gQƈ不是说执行execҎ可以返回所有的匚wQ而是说加入了g之后Q我可以通过某种方式得到所有的匚wQ这里的“方式”对于exec而言Q就是依ơ执行这个方法即可?br />2Q对于表辑ּ对象的testҎQ加入g于不加上g没有什么区别?br />3Q对于String对象的matchҎQ不加入gQ也只是q回W一个匹配,一直执行matchҎ也Lq回W一个匹配,加入gQ则一ơ返回所有的匚wQ注意这与表辑ּ对象的execҎ不同Q对于exec而言Q表辑ּ即加上了gQ也不会一ơ返回所有的匚wQ。例如:
var regx=/user\d/;
var str=“user1sdfsffuser2dfsdf?
var rs=str.match(regx);//此时rs的gؓ{user1}
var rs2=str.match(regx);//此时rs的g然ؓ{user1}
如果regx=/user\d/gQ则rs的gؓ{user1,user2}Qrs2的g为{user1,user2}
4Q对于String对象的replaceҎQ表辑ּ不加入gQ则只替换第一个匹配,如果加入gQ则替换所有匹配。(开头的三道试题能很好的说明这一点)
5Q对于String对象的splitҎQ加上g与不加g是一LQ即Q?br />var sep=/user\d/;
var array=“user1dfsfuser2dfsf?split(sep);
则array的gؓ{dfsf, dfsf}
此时sep=/user\d/gQ返回值是一L?br />6Q对于String对象的searchҎQ加不加g也是一L?br />ȝ2Q附加参数m的用?/strong>
附加参数mQ表明可以进行多行匹配,但是q个只有当用^?模式时才会v作用Q在其他的模式中Q加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字W串Q,我们举例说明q一?br />1Q用^的例?br />var regx=/^b./g;
var str=“bd76 dfsdf
         sdfsdfs dffs
         b76dsf  sdfsdf?
var rs=str.match(regx);
此时加入g和不加入gQ都只返回第一个匹配{bd}Q如果regx=/^b./gmQ则q回所有的匚w{bd,b7}Q注意如果regx=/^b./mQ则也只q回W一个匹配。所以,加入m表明可以q行多行匚wQ加入g表明可以q行全局匚wQ综合到一起就是可以进行多行全局匚w
2Q用其他模式的例子Q例?br />var regx=/user\d/;
var str=“sdfsfsdfsdf
         sdfsuser3 dffs
         b76dsf  user6?
var rs=str.match(regx);
此时不加参数gQ则q回{user3}Q加入参数gq回{user3,user6}Q加不加入mҎ没有影响?br />3Q因此对于m我们要清楚它的用,C它只对^?模式起作用,在这两种模式中,m的作用ؓQ如果不加入mQ则只能在第一行进行匹配,如果加入m则可以在所有的行进行匹配。我们再看一个^的例?br />var regx=/^b./;
var str=“ret76 dfsdf
         bjfsdfs dffs
         b76dsf  sdfsdf?
var rs=str.match(regx);
此时rs的gؓnullQ如果加入gQrs的g然ؓnullQ如果加入mQ则rs的gؓ{bj}Q也是_在第一行没有找到匹配,因ؓ有参数mQ所以可以l去下面的行L是否有匹配)Q如果m和g都加上,则返回{bj,b7}Q只加m不加g说明Q可以去多行q行匚wQ但是找C个匹配后p回,加入g表明多行中所有的匚wq回Q当然对于matchҎ是如此,对于exec呢,则需要执行多ơ才能依ơ返回)
ȝ3Q在HTML的textarea输入域中Q按一个Enter键,对应的控制字Wؓ“\r\n”,即“回车换行”,而不是“\n\r”,即“换行回车”,我们看一个前面我们Dq的例子Q?br />var regx=/a\r\nbc/;
var str=“a
         bc?
var rs=regx.exec(str);
l果Q匹配成功,rs的gؓQ{      }Q如果表辑ּ?a\n\rbc/Q则不会被匹配,因此在一般的~辑器中一个”Enter”键代表着“回车换行”,而非“换行回车”,臛_在textarea域中是这L?/p>

四,应用案例

1Q正则表辑ּ使用场景Q?/strong>
1Q登录场景,查用戯入的用户名,要求Q?br />字符长度??8之间
字符必须为字母、数字或者下划线的组?br />2Q购物场景,对于商品列表的描qͼ标签、条形码、单P{有些用户可能会提出下面需求:
希望可以对商品列表的某一列描q进行字L自定义,而且下次d仍然保持用户的修?br />2Q下面看一下在上述两个场景中,正则表达式的使用方式和具体实现?br />1Q登录场景部分正则表辑ּ实现

2Q购物场景部分正则表辑ּ实现
1>需求分析:用户希望可以对商品列表的某一列描q进行字L自定义,而且下次d仍然保持用户的修?br />
2>E序设计

cdQ?br />
3>代码实现
PageSettingc?br />
PageSettingParserc?br />
注:如果需要上面的应用案例的工E,请发emaill我?/p>

]]>
常用正则表达?http://m.tkk7.com/19851985lili/articles/93482.html☜♥☞MengChuChen☜♥☞MengChuChenFri, 12 Jan 2007 08:47:00 GMThttp://m.tkk7.com/19851985lili/articles/93482.htmlhttp://m.tkk7.com/19851985lili/comments/93482.htmlhttp://m.tkk7.com/19851985lili/articles/93482.html#Feedback0http://m.tkk7.com/19851985lili/comments/commentRss/93482.htmlhttp://m.tkk7.com/19851985lili/services/trackbacks/93482.html

代码
  1. "^\d+$"    //非负整数Q正整数 + 0Q?   
  2.   
  3. "^[0-9]*[1-9][0-9]*$"    //正整?   
  4.   
  5. "^((-\d+)|(0+))$"    //非正整数Q负整数 + 0Q?   
  6.   
  7. "^-[0-9]*[1-9][0-9]*$"    //负整?   
  8.   
  9. "^-?\d+$"      //整数   
  10.   
  11. "^\d+(\.\d+)?$"    //非负点敎ͼ正QҎ + 0Q?   
  12.   
  13. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"    //正QҎ   
  14.   
  15. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"    //非正点敎ͼ负QҎ + 0Q?   
  16.   
  17. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"    //负QҎ   
  18.   
  19. "^(-?\d+)(\.\d+)?$"    //点?   
  20.   
  21. "^[A-Za-z]+$"    //?6个英文字母组成的字符?   
  22.   
  23. "^[A-Z]+$"    //?6个英文字母的大写l成的字W串   
  24.   
  25. "^[a-z]+$"    //?6个英文字母的写l成的字W串   
  26.   
  27. "^[A-Za-z0-9]+$"    //由数字和26个英文字母组成的字符?   
  28.   
  29. "^\w+$"    //由数字?6个英文字母或者下划线l成的字W串   
  30.   
  31. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"      //email地址   
  32.   
  33. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"   //url    
  34.   
  35. //提取信息中的|络链接:   
  36. (h|H)(r|R)(e|E)(f|F)  *=  *('| ")?(\w|\\|\/|\.)+('|" |  *|>)?     
  37.   
  38. //提取信息中的邮g地址:   
  39. \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*     
  40.   
  41. //提取信息中的囄链接:   
  42. (s|S)(r|R)(c|C)  *=  *('| ")?(\w|\\|\/|\.)+('|" |  *|>)?   
  43.   
  44. //提取信息中的IP地址:     
  45. (\d+)\.(\d+)\.(\d+)\.(\d+)       
  46.   
  47. //提取信息中的中国手机L:   
  48. ( 86 )* 0 * 13 \d{ 9 }       
  49.   
  50. //提取信息中的中国固定电话L:   
  51. (\(\d{ 3 , 4 }\)|\d{ 3 , 4 }-|\s)?\d{ 8 }       
  52.   
  53. //提取信息中的中国电话LQ包括移动和固定电话Q?   
  54. (\(\d{ 3 , 4 }\)|\d{ 3 , 4 }-|\s)?\d{ 7 , 14 }       
  55.   
  56. //提取信息中的中国邮政~码:   
  57. [ 1 - 9 ]{ 1 }(\d+){ 5 }       
  58.   
  59. //提取信息中的中国w䆾证号?   
  60. \d{ 18 }|\d{ 15 }       
  61.   
  62. //提取信息中的整数Q?   
  63. \d+       
  64.   
  65. //提取信息中的点敎ͼ卛_敎ͼQ?   
  66. (-?\d*)\.?\d+       
  67.   
  68. //提取信息中的M数字  Q?   
  69. (-?\d*)(\.\d+)?     
  70.   
  71. //提取信息中的中文字符Ԍ   
  72. [\u4e00-\u9fa5]*       
  73.   
  74. //提取信息中的双字节字W串  (汉字)Q?   
  75. [^\x00-\xff]*     
  76.   
  77. //提取信息中的英文字符Ԍ   
  78. \w*  


]]>
վ֩ģ壺 ѹ˸߹ۿ鶹 | ƷһƵ | ľƷAVƬ| 㽶Ƶ߲| ĻӰƵ| Ʒ޸жƪ| ߲ѲavƬ| ŷ޹ۺAVþ| Ƶۿ| ɫվwww| Ƶۿ| ŮƵվ| ձvaҹĻþ| ѾƷӰվ| ˾þþƷҹ| þƵƷ| ɫݺվ| ѻɫëƬƵ| һƬƵ| ޳AvƬɫҹ| 4444wwwѿ| ޾Ʒ| ޹Ʒ13p| þþѵľƷ| ¶ۺƵ| jlzzjlzz߲Ƶ| һػɫѴƬƵ| ޳˵Ӱվwww| ߿ƬѲ˳Ƶ| ƷþþþþĻ| ͵͵޸պ| 99þƷƵ77| պƷר| ˳ɵӰվɫwww| 91ƷѲ߹ۿ| ޹˾þþƷţӰ| ޾ƷywӰԺ| Ƶ̫ˬ| պƷƵ߹ۿ| ߹ۿһ| aaaƵѹۿ |