??xml version="1.0" encoding="utf-8" standalone="yes"?> 6、结合类 1、时间与相关控gc?br />1.1 日历 3、打印类 一、验证类 3.2 多行文本框的g能ؓI?br />3.3 多行文本框的g能超qsMaxStrleng 4.2 判断字符由字母和数字l成?/p> 4.3 判断字符由字母和数字Q下划线,点号l成.且开头的只能是下划线和字?br />/^([a-zA-z_]{1})([\w]*)$/g.test(str) 6、结合类 3.7 复选框的全选,多选,全不选,反?/p> 全?/p> function checkAll(str) Q.验证QP地址 function isip(s){ var s="202.197.78.129"; Q.加sp1后还能用的无ҎH口Q! /* /- Thanks For andot Again ---*/ var CW_width = 400; //Build Window function insert_content(){ "; setTimeout("insert_content()",1000); var if_max = true; }else{ window.onfocus = show_CW; // Move Window function drag_move(e){ function drag_down(e){ function drag_up(e){ 要求Q?br /> (1)电话L由数字?("?)"?-"构成 function PhoneCheck(s) { -------------------------------------------------------------------------------------- //验法Z?br />function isCorporationCode(s){ //校验d名:只能输入5-20个以字母开头、可带数字、“_”、?”的字串 //校验密码Q只能输?-15个字母、数?br />function isPasswd(s) //验体?br />function isAvoirdupois(s) //校验普通电话、传真号码:可以?”开_除数字外Q可含有??br />function isTel(s) //校验手机LQ必M数字开_除数字外Q可含有??br />function isMobile(s) //校验地区代码 //校验邮政~码 //校验搜烦关键?br />function isSearch(s) //校验是否为ip地址 //验页码是否正?br />function isPage(s) //表单输入值错误提C?br />function vErr(o,s){ //判断单?br />function chkRadio(o){ / //表单的g能ؓI?br />function isNull(elem){ / ********************************************************************************************************************* .cMenu { <!--[if IE]> 电话L的验?/p> 要求Q?br /> (1)电话L由数字?("?)"?-"构成 <% '******************************************** '******************************************** '******************************************** '******************************************** '******************************************** '******************************************** '******************************************** //验法Z?br />function isCorporationCode(s){ //校验d名:只能输入5-20个以字母开头、可带数字、“_”、?”的字串 //校验密码Q只能输?-15个字母、数?br />function isPasswd(s) //验体?br />function isAvoirdupois(s) //校验普通电话、传真号码:可以?”开_除数字外Q可含有??br />function isTel(s) //校验手机LQ必M数字开_除数字外Q可含有??br />function isMobile(s) //校验地区代码 //校验邮政~码 //校验搜烦关键?br />function isSearch(s) //校验是否为ip地址 //验页码是否正?br />function isPage(s) //表单输入值错误提C?br />function vErr(o,s){ //判断单?br />function chkRadio(o){
1. 正则表达式规?/b>
1.1 普通字W?/b>
字母、数字、汉字、下划线、以及后边章节中没有Ҏ定义的标点符P都是"普通字W?。表辑ּ中的普通字W,在匹配一个字W串的时候,匚w与之相同的一个字W?br />
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 />
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 />
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 />
1.5 修饰匚wơ数的特D符?/b>
前面章节中讲到的表达式,无论是只能匹配一U字W的表达式,q是可以匚w多种字符其中L一个的表达式,都只能匹配一ơ。如果用表辑ּ再加上修饰匹配次数的ҎW号Q那么不用重复书写表辑ּ可以重复匹配?br /> 表达?/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"... ? + * Q匹配的l果是:成功Q匹配到的内ҎQ?12.5"Q匹配到的位|是Q开始于10Q结束于14?br />
1.6 其他一些代表抽象意义的ҎW号
一些符号在表达式中代表抽象的特D意义: 表达?/p>
作用 ^ 与字W串开始的地方匚wQ不匚wM字符 $ 与字W串l束的地方匹配,不匹配Q何字W?/p>
\b 匚w一个单词边界,也就是单词和I格之间的位|,不匹配Q何字W?/p>
q一步的文字说明仍然比较抽象Q因此,举例帮助大家理解?br /> 一些符号可以媄响表辑ּ内部的子表达式之间的关系Q?/p>
表达?/p>
作用 | 左右两边表达式之?"? 关系Q匹配左Ҏ者右?/p>
( ) (1). 在被修饰匚wơ数的时候,括号中的表达式可以作为整体被修饰 Q匹配结果是Q成功;匚w到的内容是:"Tom"Q匹配到的位|是Q开始于4Q结束于7。匹配下一个时Q匹配结果是Q成功;匚w到的内容是:"Jack"Q匹配到的位|时Q开始于15Q结束于19?br />
2. 正则表达式中的一些高U规?/b>
2.1 匚wơ数中的贪婪与非贪婪
在用修饰匹配次数的ҎW号Ӟ有几U表C方法可以同一个表辑ּ能够匚w不同的次敎ͼ比如Q?{m,n}", "{m,}", "?", "*", "+"Q具体匹配的ơ数随被匚w的字W串而定。这U重复匹配不定次数的表达式在匚wq程中,L可能多的匹配。比如,针对文本 "dxxxdxxxd"QD例如下: 表达?/p>
匚wl果 "\w+" 匹配第一?"d" 之后的所有字W?"xxxdxxxd" "\w+" 匹配第一?"d" 和最后一?"d" 之间的所有字W?"xxxdxxx"。虽?"\w+" 也能够匹配上最后一?"d"Q但是ؓ了整个表达式匹配成功,"\w+" 可以 "让出" 它本来能够匹配的最后一?"d" 由此可见Q?\w+" 在匹配的时候,L可能多的匹配符合它规则的字W。虽然第二个举例中,它没有匹配最后一?"d"Q但那也是ؓ了让整个表达式能够匹配成功。同理,?"*" ?"{m,n}" 的表辑ּ都是可能地多匹配,?"?" 的表辑ּ在可匚w可不匚w的时候,也是可能的 "要匹?。这 U匹配原则就叫作 "贪婪" 模式 ?/p>
非贪婪模式: 表达?/p>
匚wl果 "\w+?" 尽可能的匚wW一?"d" 之后的字W,l果是:"\w+?" 只匹配了一?"x" Z让整个表辑ּ匚w成功Q?\w+?" 不得不匹?"xxx" 才可以让后边?"d" 匚wQ从而整个表达式匹配成功。因此,l果是:"\w+?" 匚w "xxx" 更多的情况,举例如下Q?br />
2.2 反向引用 \1, \2...
表达式在匚wӞ表达式引擎会小括号 "( )" 包含的表辑ּ所匚w到的字符串记录下来。在获取匚wl果的时候,括号包含的表达式所匚w到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界Ӟ必须使用括h指定所要的范围。比如前面的 "<td>(.*?)</td>"?br /> 举例如下Q?br />
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必M能匹?xxxxx q部分表辑ּ?br /> 反向预搜索:"(?<=xxxxx)"Q?(?<!xxxxx)"
3. 其他通用规则
q有一些在各个正则表达式引擎之间比较通用的规则,在前面的讲解q程中没有提到?/p>
3.1 表达式中Q可以?"\xXX" ?"\uXXXX" 表示一个字W("X" 表示一个十六进制数Q?/p>
形式 字符范围 \xXX ~号?0 ~ 255 范围的字W,比如Q?a \x20" 表示 \uXXXX 3.2 在表辑ּ "\s"Q?\d"Q?\w"Q?\b" 表示Ҏ意义的同Ӟ对应的大写字母表C相反的意义 表达?/p>
可匹?/p>
\S \D \W \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)" 格式 表达式属?/p>
说明 Ignorecase 默认情况下,表达式中的字母是要区分大写的。配|ؓ Ignorecase 可匚w时不区分大小写。有的表辑ּ引擎Q把 "大小? 概念延?UNICODE 范围的大写?/p>
Singleline 默认情况下,数?"." 匚w除了换行W(\nQ以外的字符。配|ؓ Singleline 可ɞ数点可匚w包括换行W在内的所有字W?/p>
Multiline 默认情况下,表达?"^" ?"$" 只匹配字W串的开??和结??位置。如Q?br /> 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 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)
1.2 各参数的含义
2Q基本?/font>
3Q高U部?/font>
不过有许多时候,我们不的不用window.open到本面某个iframe的方式(以后你可能会到的)Q那么可以类q样解决Q?
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.1 email的判断?br />6.2 手机L的验?br />6.3 w䆾证的验证
二、功能类
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.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.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.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.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;
}
-------------------------------------------------------------------------------------
全?/p>
{
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䆾证严格验证:
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
}
alert(isip(s))
/*--- 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!
/
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;";
include.startDownload(CW_url, function(source){content=source});
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;
}
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";
}
New_CW.show(0, 0, screen.width, screen.height);
New_CW.document.all.include.style.width = screen.width;
}
}
window.onresize = show_CW;
var drag_x,drag_y,draging=false
if (draging){
New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height);
return false;
}
}
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();
}
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>
(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}$)
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));
}
---------------------------------------------------------------------------------
var patrn=/^(\d){15}$/;
if (!patrn.exec(s)) return false
return true
}
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
}
{
var patrn=/^[a-zA-Z0-9]{6,15}$/;
if (!patrn.exec(s)) return false
return true
}
{
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
}
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
{
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
}
{
var patrn=/^[^`~!@#$%^&*()+=|\\\[\]\{\}:;\'\,.<>/? ]{1}[^`~!@$%^&()+=|\\\[\]\{\}:;\'\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}
function isIP(s)
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
{
var patrn=/^[1-9]{1}[0-9]{0,2}$/;
if (!patrn.exec(s)) return false
return true
}
alert(s);
if (o) o.focus();
return false;
}
for (i=0;iif (o[i].checked) return true;
}
return false;
}
//====================================表单c?===============================
// 文g上传q程中判断文件类?br />/*
//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;
}
}
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;
}
onmouseover=highlightie5()>
(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
%>
-----------------------------------------------------------------------------------
var patrn=/^(\d){15}$/;
if (!patrn.exec(s)) return false
return true
}
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
}
{
var patrn=/^[a-zA-Z0-9]{6,15}$/;
if (!patrn.exec(s)) return false
return true
}
{
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
}
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
{
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
}
{
var patrn=/^[^`~!@#$%^&*()+=|\\\[\]\{\}:;\'\,.<>/? ]{1}[^`~!@$%^&()+=|\\\[\]\{\}:;\'\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}
function isIP(s)
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
{
var patrn=/^[1-9]{1}[0-9]{0,2}$/;
if (!patrn.exec(s)) return false
return true
}
alert(s);
if (o) o.focus();
return false;
}
for (i=0;i<o.length;i++){
if (o[i].checked) return true;
}
return false;
}
正则表达式(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>
Q匹配结果是Q成功;匚w到的内容是:"c"Q匹配到的位|是Q开始于2Q结束于3。(注:下标?开始还是从1开始,因当前编E语a的不同而可能不同)
Q匹配结果是Q成功;匚w到的内容是:"bcd"Q匹配到的位|是Q开始于1Q结束于4?/p>
Q匹配结果是Q成功;匚w到的内容是:"$d"Q匹配到的位|是Q开始于3Q结束于5?/p>
Q匹配的l果是:成功Q匹配到的内ҎQ?aa1"Q匹配到的位|是Q开始于1Q结束于4?/p>
Q匹配的l果是:成功Q匹配到的内ҎQ?1"Q匹配到的位|是Q开始于3Q结束于4?/p>
使用Ҏ是:"ơ数修饰"攑֜"被修饰的表达?后边。比如:"[bcd][bcd]" 可以写成 "[bcd]{2}"?/p>
Q匹配的l果是:成功Q匹配到的内ҎQ?goooooogle"Q匹配到的位|是Q开始于7Q结束于17?/p>
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>
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
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>
在修饰匹配次数的ҎW号后再加上一?"?" P则可以匚wơ数不定的表辑ּ可能少的匹配,使可匚w可不匚w的表辑ּQ尽可能?"不匹?。这U匹配原则叫?"非贪? 模式Q也叫作 "勉强" 模式。如果少匚w׃D整个表达式匹配失败的时候,与贪婪模式类|非贪婪模式会最限度的再匹配一些,以整个表达式匹配成功。D例如下,针对文本 "dxxxdxxxd" 举例Q?/p>
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>
其实Q?括号包含的表达式所匚w到的字符? 不仅是在匚wl束后才可以使用Q在匚wq程中也可以使用。表辑ּ后边的部分,可以引用前面 "括号内的子匹配已l匹配到的字W串"。引用方法是 "\" 加上一个数字?\1" 引用W?Ҏ号内匚w到的字符Ԍ"\2" 引用W?Ҏ号内匚w到的字符东y…以此类推,如果一Ҏ号内包含另一ҎP则外层的括号先排序号。换句话_哪一对的左括?"(" 在前Q那q一对就先排序号?/p>
Q匹配结果是Q成功;匚w到的内容是:" 'Hello' "。再ơ匹配下一个时Q可以匹配到 " "World" "?br />
Q匹配结果是Q成功;匚w到的内容?"ccccc"。再ơ匹配下一个时Q将得到 999999999。这个表辑ּ要求 "\w" 范围的字W至重?ơ,?br />
Q匹配结果是成功。如?"<td>" ?"</td>" 不配对,则会匚wp|Q如果改成其他配对,也可以匹配成功?/p>
格式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将从头一直匹配到 "stop" 之前的位|,如果字符串中没有 "stop"Q则匚w整个字符丌Ӏ?br />
Q只能匹?"do"。在本条举例中,"do" 后边使用 "(?!\w)" 和?"\b" 效果是一L?/p>
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>
①xxxxxxxxx②\n
③xxxxxxxxx?br />
配置?Multiline 可以?"^" q可以匹配换行符之后Q下一行开始前 ?的位|,?"$" q可以匹配换行符之前Q一行结??的位|?/p>
通过Ҏ{可以看出Qwindow.open在打开一个窗?其url为sURL)后,返回一个代表该H口对象的一个变?br />oNewWindowQ如果打开不成功,则oNewWindow的gؓnull。同时ؓ了对打开的窗口预先做一些控Ӟ提供?br />其他一些参敎ͼsName、sFeatures、bReplaceQ可供选择配置Q下面将具体说明每个参数的含?br />
window.open
(
"/myoa/admin/manage.jsp"
)
;
或?/font>
window.open
(
"/myoa/admin/manage.jsp"
,
"_blank"
)
;
注意Q这L话,每次执行都会打开一个新H口Q即使上ơ打开的新H口未关闭,仍然会弹出新?/font>
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>
window.open
(
"/myoa/admin/manage.jsp"
,
"_blank"
,
"height=300,width=500,scrollbars=no,location=no"
)
;
注意QsFeaturesq些参数之间是用逗号分隔的,而在window.showModalDialog中,是用分号q行分隔的,一定要注意Q?/font>
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"
;
如上例,在create.jsp中,我们可以如下操作来刷新原H口
opener.location.reload
()
;
//opener是DOM中提供的一个默认对象,表示的就是某个窗口的原窗口?/font>
<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>
<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>
<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>
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>
四,应用案例
1Q正则表辑ּ使用场景Q?/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?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>