主要是想要判斷一個input欄位中,所輸入的內容,是否為16進制,也就是由A-F, a-f或0-9所組成的字串
其實正規化還不是很熟,在不是很熟的狀況下,通常就只能傻傻又費工的自己寫個for 迴圈來判斷,如下:
就估且當作keyvalue是取得input欄位的value,接著要判斷他是不是16進制的字元所組成
function get_key_type()
{
var hexarray = ["A","B","C","D","E","F","a","b","c","d","e","f","0","1","2","3","4","5","6","7","8","9"];
var keyvalue=document.form.WdswepKey0.value;
var nowchar="";
var pass=0;for (m=0 ; m<keyvalue.length ; m++) {
nowchar = keyvalue.substr(m, 1);for (i=0 ; i<hexarray.length ; i++) {
alert(nowchar + "====" + hexarray[i]);
if(nowchar == hexarray[i]) {
alert("match!");
pass=1;
break;
}
else
pass=0;
}if (pass == 0)
{alert("is not hex.");
break;
}}
}
但其實,如果是透過正規化語法,只要二行就夠了
var re=/^[a-fA-F0-9]+$/;
if(re.test(document.form.WdswepKey0value)) 如果不是由0-9, a-f, A-F所組成,則會回傳false
一開始我一直犯了一個錯,就是沒有加上 + 所以一直判斷失敗,因為會變成只要有一個字元符合a-f, A-F或0-9他就會傳回true , 必須要加上+才是表示所有字元都要是由條件中的a-f, A-F和0-9所組成。
另外一個就是切割字串,雖然javascript 有提供很多切割字串的function,但是還是沒有正規語言來的好用。
ex: var test ="11 (B+G+N)"; 我想要只取出其中的數字的部份,也只需要二行。
var regex = /\s+(.*)/gi; \s表示空白的部份; + 表示至少一個; ()就是括號的部份; *表示單一字元; * 表示0個或多個; gi表示全域比對並忽略大小寫
var test ="11 (B+G+N)";
alert(test.replace(regex,"")); 用replace把條件中的字元都取代成空白,此時就會輸出11
再來就是取代掉MAC address中的:符號,例如00:11:22:33:44:55會變成001122334455
macvalue=haveMAC[i].text.replace(/\:/g,'');
參考網址:
http://neural.cs.nthu.edu.tw/jang/books/webprog/03jscript/reg1.asp?SessionCount=13 3-13: 正規表示法法