2016年4月25日 星期一

正則表達式

何謂正則式?

正規表示式使用單個字串來描述、符合一系列符合某個句法規則的字串

甚麼時候會用到?

正則運算式通常被用來檢索、取代那些符合的字串。

字元描述
^匹配輸入的開始位置。
$匹配輸入的結尾。
*匹配前一個字符零次或幾次。例如,"zo*"可以匹配"z"、"zoo"。 
+匹配前一個字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。 
?匹配前一個字符零次或一次。例如,"a?ve?"可以匹配"never"中的"ve"。
.匹配換行符以外的任何字符。 
{n}n是一個非負整數。符合確定的n次。例如,「o{2}」不能符合「Bob」中的「o」,但是能符合「food」中的兩個o。
{n,}n是一個非負整數。至少符合n次。例如,「o{2,}」不能符合「Bob」中的「o」,但能符合「foooood」中的所有o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。
{n,m}mn均為非負整數,其中n<=m。最少符合n次且最多符合m次。例如,「o{1,3}」將符合「fooooood」中的前三個o。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。
(pattern) 與模式匹配並記住匹配。匹配的子字符串可以從作為結果的 Matches 集合中使用 Item [0]...[n]取得。如果要匹配括號字符(和 ),可使用"(" 或 ")"。 
x|y一個字符集。與括號中字符的其中之一匹配。例如,"[abc]" 匹配"plain"中的"a"。
[xyz]符合pattern並取得這一符合的子字串。該子字串用於向後參照。所取得的符合可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要符合圓括號字元,請使用「\(」或「\)」。
[^xyz]一個否定的字符集。匹配不在此括號中的任何字符。例如,"[^abc]" 可以匹配"plain"中的"p"。
[a-z]表示某個範圍內的字符。與指定區間內的任何字符匹配。例如,"[a-z]"匹配"a"與"z"之間的任何一個小寫字母字符。 
[^m-z]否定的字符區間。與不在指定區間內的字符匹配。例如,"[m-z]"與不在"m"到"z"之間的任何字符匹配。 
b與單詞的邊界匹配,即單詞與空格之間的位置。例如,"erb" 與"never"中的"er"匹配,但是不匹配"verb"中的"er"。 
B與非單詞邊界匹配。"ea*rB"與"never early"中的"ear"匹配。
d與一個數字字符匹配。等價於[0-9]。 
D與非數字的字符匹配。等價於[^0-9]。 
f與分頁符匹配。
n與換行符字符匹配。
r與回車字符匹配。
s與任何白字符匹配,包括空格、制表符、分頁符等。等價於"[ fnrtv]"。 
S與任何非空白的字符匹配。等價於"[^ fnrtv]"。
t符合一個制表符。等價於\x09和\cI
v與垂直制表符匹配。
w與任何單詞字符匹配,包括下劃線。等價於"[A-Za-z0-9_]"。 
num匹配 num個,其中 num 為一個正整數。引用回到記住的匹配。例如,"(.)1"匹配兩個連續的相同的字符。 
xnxn 匹配n,其中n是一個十六進制的換碼值。十六進制換碼值必須恰好為兩個數字長。例如,"x41"匹配"A"。"x041"等價於"x04" 和 "1"。



EX:
  Email : /^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/,    
  Phone : /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,    
  Mobile : /^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/,    
  Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,    
  IdCard : /^\d{15}(\d{2}[A-Za-z0-9])?$/,    
  Currency : /^\d+(\.\d+)?$/, 
  Number : /^\d+$/,    
  Zip : /^[1-9]\d{5}$/,    
  QQ : /^[1-9]\d{4,8}$/,    
  Integer : /^[-\+]?\d+$/,    
  Double : /^[-\+]?\d+(\.\d+)?$/,    
  English : /^[A-Za-z]+$/,    
  Chinese :  /^[\u0391-\uFFE5]+$/,
  負整數  : /^-[0-9]*[1-9][0-9]*$/  //負整數 
  /^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/  
負浮點數 


set RegEx = New RegExp   '建立正則表達式
regEx.Pattern = patterns ' 設置模式
regEx.IgnoreCase = True ' 設置是否區分字符大小寫
regEx.Global = True '設置全局可用性
regEx.compile  '編譯正則式
regEx.exec       '檢查字串中指定的值並返回找到的值 
regEx.Test        '檢查字串中的值是否相同 回傳True /False

實作的例子 身分證驗證與 日期驗證
function Del_PAXV() {
  var test1 = document.getElementById("test").value;
  var passwd1 = document.getElementById("passwd").value;

var temp =/^\d{4}-\d{2}-\d{2}/ ;
var temp1 = /^[A-Z]{1}[0-9]{9}$/;
if (confirm("是否是您輸入的密碼呢?")){
if (temp1.test(passwd1) == true){
alert("密碼格式正確");
}else{
alert("密碼格式不正確");
document.getElementById("passwd").value = "";
}
}
else{
alert("密碼格式錯誤");
}
if (confirm("是否是您輸入的日期呢?")){
alert("OK 已收到");
if (temp.test(test1) == true){
alert("是日期格式");
}else{
alert("不適日期格式,請重新輸入");
document.getElementById("test").value = "";
return false ;
}
}
else
{
alert("請重新輸入");
document.getElementById("test").value = "";
return false ;
}

escape、encodeURI、endcodeURIcomponent

escape、encodeURI、endcodeURIcomponent

這些都是 Javascript 幫中文進行轉碼的語法

escape(String args), unescape(String args)


  • escape會處理 # 字 並轉化成 %23 並把空白轉換成  + 中文字處理為Unicode
  • 不會轉換的字符為 @ * / +


encodeURI(String  args) , decodeURI(String args)


  • encodeURI 不會處理 #字 會處理空白字  轉換為 %20 中文字處理為 UTF-8
  • 不會轉換的字符為 ! @ # $& * ( ) = : / ; ? + '


encodeURIComponent(String args),decodeURIComponent(String args)



  • encodeURIComponent 會處理 #字 轉換成%23 會處理空白字  轉換為 %20 中文字處理為 UTF-8
  • 不會轉換的字符為 ! *  () '