js動態拼接Regex的兩種方法

來源:互聯網
上載者:User

js動態拼接Regex的兩種方法

 這篇文章主要介紹了js動態拼接Regex的兩種方法,需要的朋友可以參考下

方法一: 

 

做項目的時候可能會遇到用js驗證表單輸入正確性的需求,這時候就需要用到js的Regex。舉個例子:比如說要驗證月份,格式為:'yyyy-MM',這個Regex寫起來很簡單,實在寫不出,也可以Google、百度一把,網上例子一大堆!但是jsRegex就這樣寫死也會帶來新的問題:如果設定檔的月份格式改了呢?改成'yyyyMM'、或者是'yyyy_MM'...呢??我們是不是要記得去把js中的Regex也跟著一遍遍的改呢?? 

 

這時候我們就要問了:怎樣才能寫出動態Regex呢,修改了設定檔,就不需要再去動代碼了呢? 

 

筆者翻閱了js手冊,沒有找到將字串轉換成Regex的方法,但是可以用eval();方法動態執行指令碼的方式間接解決這個問題!從而寫出更加通用的代碼! 

 

下面貼出上例的通用解決方案: 

 代碼如下:

/** 

* 驗證月份表單輸入是否合法 

* 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("請參考格式[" + pattern + "]輸入!n" + "e.g "2010" + splitChar + "11" or "2010" + splitChar + "03""); 

text.value = ""; 

text.focus(); 

return false; 

return true; 

 

 代碼如下:

/** 

* 驗證月份表單輸入是否合法 

* 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("請參考格式[" + pattern + "]輸入!n" + "e.g "2010" + splitChar + "11" or "2010" + splitChar + "03""); 

text.value = ""; 

text.focus(); 

return false; 

return true; 

 

有一點值得注意:動態拼出指令碼字串傳給eval()方法執行時,需要對字元''轉義 

 

方法二: 

 代碼如下:

<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> 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.