js動(dòng)態(tài)拼接正則表達(dá)式的兩種方法
更新時(shí)間:2014年03月04日 11:40:17 作者:
這篇文章主要介紹了js動(dòng)態(tài)拼接正則表達(dá)式的兩種方法,需要的朋友可以參考下
方法一:
做項(xiàng)目的時(shí)候可能會(huì)遇到用js驗(yàn)證表單輸入正確性的需求,這時(shí)候就需要用到j(luò)s的正則表達(dá)式。舉個(gè)例子:比如說(shuō)要驗(yàn)證月份,格式為:'yyyy-MM',這個(gè)正則表達(dá)式寫(xiě)起來(lái)很簡(jiǎn)單,實(shí)在寫(xiě)不出,也可以Google、百度一把,網(wǎng)上例子一大堆!但是js正則表達(dá)式就這樣寫(xiě)死也會(huì)帶來(lái)新的問(wèn)題:如果配置文件的月份格式改了呢?改成'yyyyMM'、或者是'yyyy_MM'...呢??我們是不是要記得去把js中的正則表達(dá)式也跟著一遍遍的改呢??
這時(shí)候我們就要問(wèn)了:怎樣才能寫(xiě)出動(dòng)態(tài)的正則表達(dá)式呢,修改了配置文件,就不需要再去動(dòng)代碼了呢?
筆者翻閱了js手冊(cè),沒(méi)有找到將字符串轉(zhuǎn)換成正則表達(dá)式的方法,但是可以用eval();方法動(dòng)態(tài)執(zhí)行腳本的方式間接解決這個(gè)問(wèn)題!從而寫(xiě)出更加通用的代碼!
下面貼出上例的通用解決方案:
/**
* 驗(yàn)證月份表單輸入是否合法
* pattern : 月份格式字符串
* id : 表單id
*/
function validateMonth(pattern, id) {
var text = document.getElementById(id);
var monthStr = text.value;
var splitChar = "";
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2);
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;");
//var re = /\d{4}-\d{2}$/;
if(monthStr.match(re) == null) {
alert("請(qǐng)參考格式[" + pattern + "]輸入!\n" + "e.g \"2010" + splitChar + "11\" or \"2010" + splitChar + "03\"");
text.value = "";
text.focus();
return false;
}
return true;
}
/**
* 驗(yàn)證月份表單輸入是否合法
* pattern : 月份格式字符串
* id : 表單id
*/
function validateMonth(pattern, id) {
var text = document.getElementById(id);
var monthStr = text.value;
var splitChar = "";
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2);
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;");
//var re = /\d{4}-\d{2}$/;
if(monthStr.match(re) == null) {
alert("請(qǐng)參考格式[" + pattern + "]輸入!\n" + "e.g \"2010" + splitChar + "11\" or \"2010" + splitChar + "03\"");
text.value = "";
text.focus();
return false;
}
return true;
}
有一點(diǎn)值得注意:動(dòng)態(tài)拼出腳本字符串傳給eval()方法執(zhí)行時(shí),需要對(duì)字符'\'轉(zhuǎn)義
方法二:
<script>
var n=new Array( ".htm ", ".html ", ".shtml ");
//var pattern1 = new RegExp( "\\w+\\ "+n[0]+ "$ ", "gi ");
var s1= "b.shtml ";
var result = false;
for(var i=0;i <n.length;i++)
{
pattern1 = new RegExp( "\\w+\\ "+n[i]+ "$ ", "gi ");
result|=pattern1.test(s1);
}
alert(Boolean(result));
</script>
做項(xiàng)目的時(shí)候可能會(huì)遇到用js驗(yàn)證表單輸入正確性的需求,這時(shí)候就需要用到j(luò)s的正則表達(dá)式。舉個(gè)例子:比如說(shuō)要驗(yàn)證月份,格式為:'yyyy-MM',這個(gè)正則表達(dá)式寫(xiě)起來(lái)很簡(jiǎn)單,實(shí)在寫(xiě)不出,也可以Google、百度一把,網(wǎng)上例子一大堆!但是js正則表達(dá)式就這樣寫(xiě)死也會(huì)帶來(lái)新的問(wèn)題:如果配置文件的月份格式改了呢?改成'yyyyMM'、或者是'yyyy_MM'...呢??我們是不是要記得去把js中的正則表達(dá)式也跟著一遍遍的改呢??
這時(shí)候我們就要問(wèn)了:怎樣才能寫(xiě)出動(dòng)態(tài)的正則表達(dá)式呢,修改了配置文件,就不需要再去動(dòng)代碼了呢?
筆者翻閱了js手冊(cè),沒(méi)有找到將字符串轉(zhuǎn)換成正則表達(dá)式的方法,但是可以用eval();方法動(dòng)態(tài)執(zhí)行腳本的方式間接解決這個(gè)問(wèn)題!從而寫(xiě)出更加通用的代碼!
下面貼出上例的通用解決方案:
復(fù)制代碼 代碼如下:
/**
* 驗(yàn)證月份表單輸入是否合法
* pattern : 月份格式字符串
* id : 表單id
*/
function validateMonth(pattern, id) {
var text = document.getElementById(id);
var monthStr = text.value;
var splitChar = "";
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2);
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;");
//var re = /\d{4}-\d{2}$/;
if(monthStr.match(re) == null) {
alert("請(qǐng)參考格式[" + pattern + "]輸入!\n" + "e.g \"2010" + splitChar + "11\" or \"2010" + splitChar + "03\"");
text.value = "";
text.focus();
return false;
}
return true;
}
復(fù)制代碼 代碼如下:
/**
* 驗(yàn)證月份表單輸入是否合法
* pattern : 月份格式字符串
* id : 表單id
*/
function validateMonth(pattern, id) {
var text = document.getElementById(id);
var monthStr = text.value;
var splitChar = "";
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2);
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;");
//var re = /\d{4}-\d{2}$/;
if(monthStr.match(re) == null) {
alert("請(qǐng)參考格式[" + pattern + "]輸入!\n" + "e.g \"2010" + splitChar + "11\" or \"2010" + splitChar + "03\"");
text.value = "";
text.focus();
return false;
}
return true;
}
有一點(diǎn)值得注意:動(dòng)態(tài)拼出腳本字符串傳給eval()方法執(zhí)行時(shí),需要對(duì)字符'\'轉(zhuǎn)義
方法二:
復(fù)制代碼 代碼如下:
<script>
var n=new Array( ".htm ", ".html ", ".shtml ");
//var pattern1 = new RegExp( "\\w+\\ "+n[0]+ "$ ", "gi ");
var s1= "b.shtml ";
var result = false;
for(var i=0;i <n.length;i++)
{
pattern1 = new RegExp( "\\w+\\ "+n[i]+ "$ ", "gi ");
result|=pattern1.test(s1);
}
alert(Boolean(result));
</script>
您可能感興趣的文章:
- js正則表達(dá)式之exec方法講解
- 正則表達(dá)式語(yǔ)法規(guī)則及在Javascript和C#中的使用方法
- js將字符串轉(zhuǎn)成正則表達(dá)式的實(shí)現(xiàn)方法
- JS正則表達(dá)式獲取分組內(nèi)容的方法詳解
- js正則表達(dá)式中test,exec,match方法的區(qū)別說(shuō)明
- JS正則表達(dá)式獲取字符串中特定字符的方法
- JS使用replace()方法和正則表達(dá)式進(jìn)行字符串的搜索與替換實(shí)例
- JavaScript正則表達(dá)式驗(yàn)證身份證號(hào)碼是否合法(兩種方法)
- JavaScript正則表達(dá)式下之相關(guān)方法
相關(guān)文章
BootStrap Select清除選中的狀態(tài)恢復(fù)默認(rèn)狀態(tài)
PC端項(xiàng)目中經(jīng)常會(huì)出現(xiàn)大量的數(shù)據(jù)列表頁(yè)面,涉及到下拉框選擇篩選條件;當(dāng)時(shí)用到bootstrap-select下拉框時(shí)該如何點(diǎn)擊重置按鈕就清除下拉框的選中狀態(tài)呢?下面通過(guò)本文給大家介紹下,需要的的朋友參考下吧2017-06-06Array數(shù)組對(duì)象中的forEach、map、filter及reduce詳析
這篇文章主要給大家介紹了關(guān)于Array數(shù)組對(duì)象中forEach、map、filter及reduce的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用array數(shù)據(jù)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08Layer UI表格列日期格式化及取消自動(dòng)填充日期的實(shí)現(xiàn)方法
這篇文章主要介紹了Layer UI表格列日期格式化及取消自動(dòng)填充日期的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05JavaScript模擬實(shí)現(xiàn)鍵盤(pán)打字效果
這篇文章主要介紹了JavaScript模擬實(shí)現(xiàn)鍵盤(pán)打字效果,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-06-06javascript實(shí)現(xiàn)劃詞標(biāo)記+劃詞搜索功能
javascript實(shí)現(xiàn)劃詞標(biāo)記+劃詞搜索功能...2007-03-03JavaScript的垃圾回收機(jī)制與內(nèi)存管理
這篇文章主要介紹了JavaScript的垃圾回收機(jī)制與內(nèi)存管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08