正則表達式-彙總

 正則表達式使用詳解
--------------------------------------------------------------------------------
 
作者:呂曉波  
  
    如果我們問那些UNIX系統的愛好者他們最喜歡什麼,答案除了穩定的系統和可以遠程啓動之外,十有八九的人會提到正則表達式;如果我們再問他們最頭痛的是什麼,可能除了複雜的進程控制和安裝過程之外,還會是正則表達式。那麼正則表達式到底是什麼?如何才能真正的掌握正則表達式並正確的加以靈活運用?本文將就此展開介紹,希望能夠對那些渴望瞭解和掌握正則表達式的讀者有所助益。 

入門簡介 

  簡單的說,正則表達式是一種可以用於模式匹配和替換的強有力的工具。我們可以在幾乎所有的基於UNIX系統的工具中找到正則表達式的身影,例如,vi編輯器,Perl或PHP腳本語言,以及awk或sed shell程序等。此外,象JavaScript這種客戶端的腳本語言也提供了對正則表達式的支持。由此可見,正則表達式已經超出了某種語言或某個系統的侷限,成爲人們廣爲接受的概念和功能。 
  正則表達式可以讓用戶通過使用一系列的特殊字符構建匹配模式,然後把匹配模式與數據文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據比較對象中是否包含匹配模式,執行相應的程序。 
  舉例來說,正則表達式的一個最爲普遍的應用就是用於驗證用戶在線輸入的郵件地址的格式是否正確。如果通過正則表達式驗證用戶郵件地址的格式正確,用戶所填寫的表單信息將會被正常處理;反之,如果用戶輸入的郵件地址與正則表達的模式不匹配,將會彈出提示信息,要求用戶重新輸入正確的郵件地址。由此可見正則表達式在WEB應用的邏輯判斷中具有舉足輕重的作用。

基本語法 


  在對正則表達式的功能和作用有了初步的瞭解之後,我們就來具體看一下正則表達式的語法格式。 
  正則表達式的形式一般如下: 
  /love/ 
  其中位於“/”定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶只要把希望查找匹配對象的模式內容放入“/”定界符之間即可。爲了能夠使用戶更加靈活的定製模式內容,正則表達式提供了專門的“元字符”。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以用來規定其前導字符(即位於元字符前面的字符)在目標對象中的出現模式。 
  較爲常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符規定其前導字符必須在目標對象中連續出現一次或多次,“*”元字符規定其前導字符必須在目標對象中出現零次或連續多次,而“?”元字符規定其前導對象必須在目標對象中連續出現零次或一次。 
  下面,就讓我們來看一下正則表達式元字符的具體應用。 
  /fo+/ 
  因爲上述正則表達式中包含“+”元字符,表示可以與目標對象中的 “fool”, “fo”, 或者 “football”等在字母f後面連續出現一個或多個字母o的字符串相匹配。 
  /eg*/ 
  因爲上述正則表達式中包含“*”元字符,表示可以與目標對象中的 “easy”, “ego”, 或者 “egg”等在字母e後面連續出現零個或多個字母g的字符串相匹配。 
  /Wil?/ 
  因爲上述正則表達式中包含“?”元字符,表示可以與目標對象中的 “Win”, 或者 “Wilson”,等在字母i後面連續出現零個或一個字母l的字符串相匹配。 
  除了元字符之外,用戶還可以精確指定模式在匹配對象中出現的頻率。例如, 
  /jim{2,6}/ 
  上述正則表達式規定字符m可以在匹配對象中連續出現2-6次,因此,上述正則表達式可以同jimmy或jimmmmmy等字符串相匹配。 
  在對如何使用正則表達式有了初步瞭解之後,我們來看一下其它幾個重要的元字符的使用方式。 
  /s:用於匹配單個空格符,包括tab鍵和換行符; 
  /S:用於匹配除單個空格符之外的所有字符; 
  /d:用於匹配從0到9的數字; 
  /w:用於匹配字母,數字或下劃線字符; 
  /W:用於匹配所有與/w不匹配的字符; 
  . :用於匹配除換行符之外的所有字符。 

  (說明:我們可以把/s和/S以及/w和/W看作互爲逆運算) 
  下面,我們就通過實例看一下如何在正則表達式中使用上述元字符。 
  //s+/ 
  上述正則表達式可以用於匹配目標對象中的一個或多個空格字符。 
  //d000/ 
  如果我們手中有一份複雜的財務報表,那麼我們可以通過上述正則表達式輕而易舉的查找到所有總額達千元的款項。 
  除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較爲獨特的專用字符,即定位符。定位符用於規定匹配模式在目標對象中的出現位置。 
  較爲常用的定位符包括: “^”, “$”, “/b” 以及 “/B”。其中,“^”定位符規定匹配模式必須出現在目標字符串的開頭,“$”定位符規定匹配模式必須出現在目標對象的結尾,/b定位符規定匹配模式必須出現在目標字符串的開頭或結尾的兩個邊界之一,而“/B”定位符則規定匹配對象必須位於目標字符串的開頭和結尾兩個邊界之內,即匹配對象既不能作爲目標字符串的開頭,也不能作爲目標字符串的結尾。同樣,我們也可以把“^”和“$”以及“/b”和“/B”看作是互爲逆運算的兩組定位符。舉例來說: 
  /^hell/ 
  因爲上述正則表達式中包含“^”定位符,所以可以與目標對象中以 “hell”, “hello”或 “hellhound”開頭的字符串相匹配。 
  /ar$/ 
  因爲上述正則表達式中包含“$”定位符,所以可以與目標對象中以 “car”, “bar”或 “ar” 結尾的字符串相匹配。 
  //bbom/ 
  因爲上述正則表達式模式以“/b”定位符開頭,所以可以與目標對象中以 “bomb”, 或 “bom”開頭的字符串相匹配。 
  /man/b/ 
  因爲上述正則表達式模式以“/b”定位符結尾,所以可以與目標對象中以 “human”, “woman”或 “man”結尾的字符串相匹配。 
  爲了能夠方便用戶更加靈活的設定匹配模式,正則表達式允許使用者在匹配模式中指定某一個範圍而不侷限於具體的字符。例如: 
  /[A-Z]/ 
  上述正則表達式將會與從A到Z範圍內任何一個大寫字母相匹配。 
  /[a-z]/ 
  上述正則表達式將會與從a到z範圍內任何一個小寫字母相匹配。 
  /[0-9]/ 
  上述正則表達式將會與從0到9範圍內任何一個數字相匹配。 
  /([a-z][A-Z][0-9])+/ 
  上述正則表達式將會與任何由字母和數字組成的字符串,如 “aB0” 等相匹配。這裏需要提醒用戶注意的一點就是可以在正則表達式中使用 “()” 把字符串組合在一起。“()”符號包含的內容必須同時出現在目標對象中。因此,上述正則表達式將無法與諸如 “abc”等的字符串匹配,因爲“abc”中的最後一個字符爲字母而非數字。 
  如果我們希望在正則表達式中實現類似編程邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符 “|”。例如: 
  /to|too|2/ 
  上述正則表達式將會與目標對象中的 “to”, “too”, 或 “2” 相匹配。 
  正則表達式中還有一個較爲常用的運算符,即否定符 “[^]”。與我們前文所介紹的定位符 “^” 不同,否定符 “[^]”規定目標對象中不能存在模式中所規定的字符串。例如: 
  /[^A-C]/ 
  上述字符串將會與目標對象中除A,B,和C之外的任何字符相匹配。一般來說,當“^”出現在 “[]”內時就被視做否定運算符;而當“^”位於“[]”之外,或沒有“[]”時,則應當被視做定位符。 
  最後,當用戶需要在正則表達式的模式中加入元字符,並查找其匹配對象時,可以使用轉義符“/”。例如: 
  /Th/*/ 
  上述正則表達式將會與目標對象中的“Th*”而非“The”等相匹配。

使用實例 

  在對正則表達式有了較爲全面的瞭解之後,我們就來看一下如何在Perl,PHP,以及JavaScript中使用正則表達式。 

  通常,Perl中正則表達式的使用格式如下: 

  operator / regular-expression / string-to-replace / modifiers 

  運算符一項可以是m或s,分別代表匹配運算和替換運算。 

  其中,正則表達式一項是將要進行匹配或替換操作的模式,可以由任意字符,元字符,或定位符等組成。替換字符串一項是使用s運算符時,對查找到的模式匹配對象進行替換的字符串。最後的參數項用來控制不同的匹配或替換方式。例如: 

  s/geed/good/ 

  將會在目標對象中查找第一個出現的geed字串,並將其替換爲good。如果我們希望在目標對象的全局範圍內執行多次查找—替換操作的話,可以使用參數 “g”,即s/love/lust/g。 

  此外,如果我們不需要限制匹配的大小寫形式的話,可以使用參數 “i ”。例如, 

  m/JewEL/i 

  上述正則表達式將會與目標對象中的jewel,Jewel,或JEWEL相匹配。 

  在Perl中,使用專門的運算符“=~”指定正則表達式的匹配對象。例如: 

  $flag =~ s/abc/ABC/ 

  上述正則表達式將會把變量$flag中的字串abc替換爲ABC。 

  下面,我們就在Perl程序中加入正則表達式,驗證用戶郵件地址格式的有效性。代碼如下: 

  #!/usr/bin/perl 
  # get input 
  print “What/'s your email address?/n”; 
  $email = <STDIN> 
  chomp($email); 
  # match and display result 
  if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/) 
  { 
  print(“Your email address is correct!/n”); 
  } 
  else 
   { 
    print(“Please try again!/n”); 
   } 

  如果用戶更偏愛PHP的話,可以使用ereg()函數進行模式匹配操作。ereg()函數的使用格式如下: 
   ereg(pattern, string) 

  其中,pattern代表正則表達式的模式,而string則是執行查找替換操作的目標對象。同樣是驗證郵件地址,使用PHP編寫的程序代碼如下: 

  <?php 
   if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+”,$email)) 
    { echo “Your email address is correct!”;} 
   else 
    { echo “Please try again!”;} 
   ?> 
  最後,我們在來看一下JavaScript。JavaScript 1.2中帶有一個功能強大的RegExp()對象,可以用來進行正則表達式的匹配操作。其中的test()方法可以檢驗目標對象中是否包含匹配模式,並相應的返回true或false。 

  我們可以使用JavaScript編寫以下腳本,驗證用戶輸入的郵件地址的有效性。 

   
    
    <script language=/"Javascript1.2/"> 
     <!-- start hiding 
     function verifyAddress(obj) 
     { 
      var email = obj.email.value; 
      var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/; 
      flag = pattern.test(email); 
      if(flag) 
      { 
       alert(“Your email address is correct!”); 
       return true; 
      } 
      else 
       { 
        alert(“Please try again!”); 
        return false; 
        } 
      } 
     // stop hiding --> 
     
    
    
   <form onSubmit=/"return verifyAddress(this);/"> 
   <input name=/"email/" type=/"text/"> 
   <input type=/"submit/"> 
   </form> 

 

 

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

 

匹配中文字符的正則表達式: [/u4e00-/u9fa5]

匹配雙字節字符(包括漢字在內):[^/x00-/xff]

應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

String.prototype.len=function(){return this.replace([^/x00-/xff]/g,"aa").length;}

匹配空行的正則表達式:/n[/s| ]*/r

匹配HTML標記的正則表達式:/<(.*)>.*<///1>|<(.*) //>/

匹配首尾空格的正則表達式:(^/s*)|(/s*$)

應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:

應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:

String.prototype.trim = function()
{
    return this.replace(/(^/s*)|(/s*$)/g, "");
}

利用正則表達式分解和轉換IP地址:

下面是利用正則表達式匹配IP地址,並將IP地址轉換成對應數值的Javascript程序:

function IP2V(ip)
{
 re=/(/d+)/.(/d+)/.(/d+)/.(/d+)/g  //匹配IP地址的正則表達式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
 throw new Error("Not a valid IP address!")
}
}

不過上面的程序如果不用正則表達式,而直接用split函數來分解可能更簡單,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匹配Email地址的正則表達式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*

匹配網址URL的正則表達式:http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?

利用正則表達式去除字串中重複的字符的算法程序:[注:此程序不正確,原因見本貼回覆]

var s="abacabefgeeii"
var s1=s.replace(/(.).*/1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"") 
alert(s1+s2)  //結果爲:abcefgi

我原來在CSDN上發貼尋求一個表達式來實現去除重複字符的方法,最終沒有找到,這是我能想到的最簡單的實現方法。思路是使用後向引用取出包括重複的字符,再以重複的字符建立第二個表達式,取到不重複的字符,兩者串連。這個方法對於字符順序有要求的字符串可能不適用。

得用正則表達式從URL地址中提取文件名的javascript程序,如下結果爲page1

s="http://www.9499.net/page1.htm"
s=s.replace(/(.*//){0,}([^/.]+).*/ig,"$2")
alert(s)

利用正則表達式限制網頁表單裏的文本框輸入內容:

用正則表達式限制只能輸入中文:οnkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/u4E00-/u9FA5]/g,''))"

用正則表達式限制只能輸入全角字符: οnkeyup="value=value.replace(/[^/uFF00-/uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/uFF00-/uFFFF]/g,''))"

用正則表達式限制只能輸入數字:οnkeyup="value=value.replace(/[^/d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"

用正則表達式限制只能輸入數字和英文:οnkeyup="value=value.replace(/[/W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"

 

正則表達式,相關鏈接 
http://blog.csdn.net/laily/category/19548.aspx 
http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx 微軟的正則表達式教程(五):選擇/編組和後向引用 

http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx 微軟的正則表達式教程(四):限定符和定位符 

http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx 微軟的正則表達式教程(三):字符匹配 

http://blog.csdn.net/laily/archive/2004/06/30/30514.aspx 微軟的正則表達式教程(二):正則表達式語法和優先權順序 

http://blog.csdn.net/laily/archive/2004/06/30/30511.aspx 微軟的正則表達式教程(一):正則表達式簡介 

http://blog.csdn.net/laily/archive/2004/06/30/30360.aspx 小程序大作爲:高級查找/替換、正則表達式練習器、Javascript腳本程序調試器 

http://blog.csdn.net/laily/archive/2004/06/24/25872.aspx 經典正則表達式 

正則表達式,正規表達式,正則表達式匹配,正則表達式語法,模式匹配,正規表達式匹配 javascript正則表達式 ASP正則表達式 ASP.NET正則表達式 C#正則表達式 JSP正則表達式 PHP正則表達式 VB.NET正則表達式 VBSCript正則表達式編程 delphi正則表達式 jscript

 

正則表達式 regular expression 
正則表達式 RegExp 
模式 pattern 
匹配 Match 
.NET命名空間: System.Text.RegularExpression 

 

補充: 
^/d+$  //匹配非負整數(正整數 + 0) 
^[0-9]*[1-9][0-9]*$  //匹配正整數 
^((-/d+)|(0+))$  //匹配非正整數(負整數 + 0) 
^-[0-9]*[1-9][0-9]*$  //匹配負整數 
^-?/d+$    //匹配整數 
^/d+(/./d+)?$  //匹配非負浮點數(正浮點數 + 0) 
^(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮點數 
^((-/d+(/./d+)?)|(0+(/.0+)?))$  //匹配非正浮點數(負浮點數 + 0) 
^(-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配負浮點數 
^(-?/d+)(/./d+)?$  //匹配浮點數 
^[A-Za-z]+$  //匹配由26個英文字母組成的字符串 
^[A-Z]+$  //匹配由26個英文字母的大寫組成的字符串 
^[a-z]+$  //匹配由26個英文字母的小寫組成的字符串 
^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字符串 
^/w+$  //匹配由數字、26個英文字母或者下劃線組成的字符串 
^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$    //匹配email地址 
^[a-zA-z]+://匹配(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$  //匹配url

 

利用正則表達式去除字串中重複的字符的算法程序: 

var s="abacabefgeeii" 
var s1=s.replace(/(.).*/1/g,"$1") 
var re=new RegExp("["+s1+"]","g") 
var s2=s.replace(re,"") 
alert(s1+s2) //結果爲:abcefgi 
=============================== 
如果var s = "abacabefggeeii" 
結果就不對了,結果爲:abeicfgg 
正則表達式的能力有限

 

1.確認有效電子郵件格式 
下面的代碼示例使用靜態 Regex.IsMatch 方法驗證一個字符串是否爲有效電子郵件格式。如果字符串包含一個有效的電子郵件地址,則 IsValidEmail 方法返回 true,否則返回 false,但不採取其他任何操作。您可以使用 IsValidEmail,在應用程序將地址存儲在數據庫中或顯示在 ASP.NET 頁中之前,篩選出包含無效字符的電子郵件地址。 

[Visual Basic] 
Function IsValidEmail(strIn As String) As Boolean 
' Return true if strIn is in valid e-mail format. 
Return Regex.IsMatch(strIn, ("^([/w-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([/w-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)$") 
End Function 
[C#] 
bool IsValidEmail(string strIn) 

// Return true if strIn is in valid e-mail format. 
return Regex.IsMatch(strIn, @"^([/w-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([/w-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)$"); 



2.清理輸入字符串 
下面的代碼示例使用靜態 Regex.Replace 方法從字符串中抽出無效字符。您可以使用這裏定義的 CleanInput 方法,清除掉在接受用戶輸入的窗體的文本字段中輸入的可能有害的字符。CleanInput 在清除掉除 @、-(連字符)和 .(句點)以外的所有非字母數字字符後返回一個字符串。 

[Visual Basic] 
Function CleanInput(strIn As String) As String 
' Replace invalid characters with empty strings. 
Return Regex.Replace(strIn, "[^/w/.@-]", "") 
End Function 
[C#] 
String CleanInput(string strIn) 

// Replace invalid characters with empty strings. 
return Regex.Replace(strIn, @"[^/w/.@-]", ""); 



3.更改日期格式 
以下代碼示例使用 Regex.Replace 方法來用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。 

[Visual Basic] 
Function MDYToDMY(input As String) As String 
Return Regex.Replace(input, _ 
"/b(?<month>/d{1,2})/(?<day>/d{1,2})/(?<year>/d{2,4})/b", _ 
"${day}-${month}-${year}") 
End Function 
[C#] 
String MDYToDMY(String input) 

return Regex.Replace(input, 
"//b(?<month>//d{1,2})/(?<day>//d{1,2})/(?<year>//d{2,4})//b", 
"${day}-${month}-${year}"); 

Regex 替換模式 
本示例說明如何在 Regex.Replace 的替換模式中使用命名的反向引用。其中,替換表達式 ${day} 插入由 (?<day>...) 組捕獲的子字符串。 

有幾種靜態函數使您可以在使用正則表達式操作時無需創建顯式正則表達式對象,而 Regex.Replace 函數正是其中之一。如果您不想保留編譯的正則表達式,這將給您帶來方便 


4.提取 URL 信息 
以下代碼示例使用 Match.Result 來從 URL 提取協議和端口號。例如,“http://www.contoso.com:8080/letters/readme.html”將返回“http:8080”。 

[Visual Basic] 
Function Extension(url As String) As String 
Dim r As New Regex("^(?<proto>/w+)://[^/]+?(?<port>:/d+)?/", _ 
RegexOptions.Compiled) 
Return r.Match(url).Result("${proto}${port}") 
End Function 
[C#] 
String Extension(String url) 

Regex r = new Regex(@"^(?<proto>/w+)://[^/]+?(?<port>:/d+)?/", 
RegexOptions.Compiled); 
return r.Match(url).Result("${proto}${port}"); 
}

 

  一、正則表達式基礎知識
  我們先從簡單的開始。假設你要搜索一個包含字符“cat”的字符串,搜索用的正則表達式就是“cat”。如果搜索對大小寫不敏感,單詞“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是說:


  1.1句點符號
  假設你在玩英文拼字遊戲,想要找出三個字母的單詞,而且這些單詞必須以“t”字母開頭,以“n”字母結束。另外,假設有一本英文字典,你可以用正則表達式搜索它的全部內容。要構造出這個正則表達式,你可以使用一個通配符??句點符號“.”。這樣,完整的表達式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,還匹配“t#n”、“tpn”甚至“tn”,還有其他許多無意義的組合。這是因爲句點符號匹配所有字符,包括空格、Tab字符甚至換行符:

  1.2方括號符號
  爲了解決句點符號匹配範圍過於廣泛這一問題,你可以在方括號(“[]”)裏面指定看來有意義的字符。此時,只有方括號裏面指定的字符才參與匹配。也就是說,正則表達式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因爲在方括號之內你只能匹配單個字符:

  1.4表示匹配次數的符號
  表一顯示了表示匹配次數的符號,這些符號用來確定緊靠該符號左邊的符號出現的次數:

  假設我們要在文本文件中搜索美國的社會安全號碼。這個號碼的格式是999-99-9999。用來匹配它的正則表達式如圖一所示。在正則表達式中,連字符(“-”)有着特殊的意義,它表示一個範圍,比如從0到9。因此,匹配社會安全號碼中的連字符號時,它的前面要加上一個轉義字符“/”。

  圖一:匹配所有123-12-1234形式的社會安全號碼
  假設進行搜索的時候,你希望連字符號可以出現,也可以不出現??即,999-99-9999和999999999都屬於正確的格式。這時,你可以在連字符號後面加上“?”數量限定符號,如圖二所示:

  圖二:匹配所有123-12-1234和123121234形式的社會安全號碼
  下面我們再來看另外一個例子。美國汽車牌照的一種格式是四個數字加上二個字母。它的正則表達式前面是數字部分“[0-9]{ 4}”,再加上字母部分“[A-Z]{ 2}”。圖三顯示了完整的正則表達式。

  圖三:匹配典型的美國汽車牌照號碼,如8836KV
  1.5“否”符號
  “^”符號稱爲“否”符號。如果用在方括號內,“^”表示不想要匹配的字符。例如,圖四的正則表達式匹配所有單詞,但以“X”字母開頭的單詞除外。

  圖四:匹配所有單詞,但“X”開頭的除外
  1.6圓括號和空白符號
  假設要從格式爲“June26,1951”的生日日期中提取出月份部分,用來匹配該日期的正則表達式可以如圖五所示:

  圖五:匹配所有MothDD,YYYY格式的日期
  新出現的“/s”符號是空白符號,匹配所有的空白字符,包括Tab字符。如果字符串正確匹配,接下來如何提取出月份部分呢?只需在月份周圍加上一個圓括號創建一個組,然後用OROAPI(本文後面詳細討論)提取出它的值。修改後的正則表達式如圖六所示:

  圖六:匹配所有MonthDD,YYYY格式的日期,定義月份值爲第一個組
  1.7其它符號
  爲簡便起見,你可以使用一些爲常見正則表達式創建的快捷符號。如表二所示:
  表二:常用符號

  例如,在前面社會安全號碼的例子中,所有出現“[0-9]”的地方我們都可以使用“/d”。修改後的正則表達式如圖七所示:


/*------------------------ 
功能:替換任何空白字符 
-------------------------*/ 
function TrimString (strVal) 

strTmp = strVal + ""; 
if (strTmp.length == 0) 
return (strTmp); 
reVal = /^/s*/; 
strTmp = strTmp.replace (reVal, ''); 
reVal = //s*$/; 
return (strTmp.replace (reVal, '')); 


/*------------------------ 
功能:檢測是否是有效數字 
-------------------------*/ 
function Check_Num( num ) 

num = ( TrimString( num ) ); 
if (num.length == 0) 
return (false); 
return ( Number( num ) ); 


/*------------------------ 
功能:檢測是否是有效日期 
-------------------------*/ 
function Check_Date (strDate) 

strDate = (TrimString (strDate)); 
if (strDate.length == 0) 
return (false); 
reVal = /^([1-2]/d{3})[//|/-](0?[1-9]|10|11|12)[//|/-]([1-2]?[0-9]|0[1-9]|30|31)$/; 
return (reVal.test (strDate)); 


/*------------------------ 
功能:檢測是否是有效Email 
-------------------------*/ 
function Check_Email (strEmail) 

strEmail = (TrimString (strEmail)); 
if (strEmail.length == 0) 
return (false); 

reVal = /^[/-!#/$%&'/*/+///.//0-9=/?A-Z/^_`a-z{|}~]+@[/-!#/$%&'/*/+///.//0-9=/?A-Z/^_`a-z{|}~]+(/.[/-!#/$%&'/*/+///.//0-9=/?A-Z/^_`a-z{|}~]+)+$/; 
return (reVal.test (strEmail)); 


/*------------------------ 
功能:檢測是否是有效時間 
-------------------------*/ 
function Check_Time (strTime) 

strTime = (TrimString (strTime)); 
if (strTime.length == 0) 
return (false); 

reVal = /^(([0-9]|[01][0-9]|2[0-3])(:([0-9]|[0-5][0-9])){0,2}|(0?[0-9]|1[0-1])(:([0-9]|[0-5][0-9])){0,2}/s?[aApP][mM])?$/; 
return (reVal.test (strTime)); 


/*------------------------ 
功能:檢測是否是有效日期特定格式 
-------------------------*/ 
function Check_Date_1 (strDate) 

strDate = (TrimString (strDate)); 
if (strDate.length == 0) 
return (false); 
reVal = /^([1-2]/d{3})[//](0?[1-9]|10|11|12)[//]([1-2]?[0-9]|0[1-9]|30|31)$/; 
return (reVal.test (strDate)); 


/*------------------------ 
功能:檢測是否是有效日期特定格式 
-------------------------*/ 
function Check_Date_2 (strDate) 

strDate = (TrimString (strDate)); 
if (strDate.length == 0) 
return (false); 
reVal = /^([1-2]/d{3})[/-](0[1-9]|10|11|12)[/-]([1-2][0-9]|0[1-9]|30|31)$/; 
return (reVal.test (strDate)); 


/*-------------------------------------- 
功能:換行定行 
---------------------------------------*/ 
function enter( form, temp ) 

if ( window.event.keyCode == 13 ) 

eval( form + temp + ".focus()" ); 
eval( form + temp + ".select()" ); 

else 
return (false); 


/*-------------------------------------- 
功能:檢查字符串長度 
---------------------------------------*/ 
function ByteString (strVal) 

nLen = 0; 

for (i = 0; i < strVal.length; i ++) 

if (strVal.charCodeAt (i) > 255) 
nLen += 2; 
else 
nLen ++; 
}; 
return (nLen); 


/*-------------------------------------- 
功能:按要求截取字符串長度 
---------------------------------------*/ 
function SubString(strVal,nStrLen) 

nLen = 0; 
nTemp = 0; 
for (i = 0; i < strVal.length; i ++) 

if (strVal.charCodeAt (i) > 255) 
nLen += 2; 
else 
nLen ++; 
if(nLen <= nStrLen) 
nTemp = i; 
else 
break; 
}; 
return(strVal.substr(0,nTemp+1)); 


/*------------------------ 
功能:檢測密碼,密碼只能由英文字母、數字、減號、下劃線、$、#、*、(和)構成,且首位必須是英文字母 
-------------------------*/ 
function Check_Pass( strPass ) 

strPass = ( TrimString( strPass ) ); 
if (strPass.length == 0) 
return (false); 
reVal = /^[a-zA-Z]{1}[a-zA-Z0-9-_$#*()]{0,29}$/; 
return ( reVal.test (strPass) ); 


這是所有的,不過是PHP的,你自己轉換一下吧~~ 

# re: 正則表達式 2005-02-28 00:59 yongsheng

^(((19)|(20))/d{2})(((((-|/)0?)|0)[1-9])|((-|/)?1[0-2]))((((((-|/)0?)|0)[1-9])|((-|/)?[1-2][0-9]))|((-|/)?3[0-1]))$ 


2004-1-1格式

# re: 正則表達式 2005-03-07 14:33 yongsheng

一、驗證類 
1、數字驗證內 
1.1 整數 
1.2 大於0的整數 (用於傳來的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 只有年和月。形如(2003-05,或者2003-5) 
2.5 只有小時和分鐘,形如(12:03) 
3、表單類 
3.1 所有的表單的值都不能爲空 
3.2 多行文本框的值不能爲空。 
3.3 多行文本框的值不能超過sMaxStrleng 
3.4 多行文本框的值不能少於sMixStrleng 
3.5 判斷單選框是否選擇。 
3.6 判斷複選框是否選擇. 
3.7 複選框的全選,多選,全不選,反選 
3.8 文件上傳過程中判斷文件類型 
4、字符類 
4.1 判斷字符全部由a-Z或者是A-Z的字字母組成 
4.2 判斷字符由字母和數字組成。 
4.3 判斷字符由字母和數字,下劃線,點號組成.且開頭的只能是下劃線和字母 
4.4 字符串替換函數.Replace(); 
5、瀏覽器類 
5.1 判斷瀏覽器的類型 
5.2 判斷ie的版本 
5.3 判斷客戶端的分辨率 

6、結合類 
6.1 email的判斷。 
6.2 手機號碼的驗證 
6.3 身份證的驗證 


二、功能類 

1、時間與相關控件類 
1.1 日曆 
1.2 時間控件 
1.3 萬年曆 
1.4 顯示動態顯示時鐘效果(文本,如OA中時間) 
1.5 顯示動態顯示時鐘效果 (圖像,像手錶) 
2、表單類 
2.1 自動生成表單 
2.2 動態添加,修改,刪除下拉框中的元素 
2.3 可以輸入內容的下拉框 
2.4 多行文本框中只能輸入iMax文字。如果多輸入了,自動減少到iMax個文字(多用於短信發送) 

3、打印類 
3.1 打印控件 
4、事件類 
4.1 屏蔽右鍵 
4.2 屏蔽所有功能鍵 
4.3 --> 和<-- F5 F11,F9,F1 
4.4 屏蔽組合鍵ctrl+N 
5、網頁設計類 
5.1 連續滾動的文字,圖片(注意是連續的,兩段文字和圖片中沒有空白出現) 
5.2 html編輯控件類 
5.3 顏色選取框控件 
5.4 下拉菜單 
5.5 兩層或多層次的下拉菜單 
5.6 仿IE菜單的按鈕。(效果如rongshuxa.com的導航欄目) 
5.7 狀態欄,title欄的動態效果(例子很多,可以研究一下) 
5.8 雙擊後,網頁自動滾屏 
6、樹型結構。 
6.1 asp+SQL版 
6.2 asp+xml+sql版 
6.3 java+sql或者java+sql+xml 
7、無邊框效果的製作 
8、連動下拉框技術 
9、文本排序 


一、驗證類 
1、數字驗證內 
1.1 整數 
/^(-|/+)?/d+$/.test(str) 
1.2 大於0的整數 (用於傳來的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('輸入的參數不是時間格式'); 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 只有年和月。形如(2003-05,或者2003-5) 
2.5 只有小時和分鐘,形如(12:03) 
3、表單類 
3.1 所有的表單的值都不能爲空 
<input οnblur="if(this.value.replace(/^/s+|/s+$/g,'')=='')alert('不能爲空!')"> 
3.2 多行文本框的值不能爲空。 
3.3 多行文本框的值不能超過sMaxStrleng 
3.4 多行文本框的值不能少於sMixStrleng 
3.5 判斷單選框是否選擇。 
3.6 判斷複選框是否選擇. 
3.7 複選框的全選,多選,全不選,反選 
3.8 文件上傳過程中判斷文件類型 
4、字符類 
4.1 判斷字符全部由a-Z或者是A-Z的字字母組成 
<input οnblur="if(/[^a-zA-Z]/g.test(this.value))alert('有錯')"> 
4.2 判斷字符由字母和數字組成。 
<input οnblur="if(/[^0-9a-zA-Z]/g.test(this.value))alert('有錯')"> 
4.3 判斷字符由字母和數字,下劃線,點號組成.且開頭的只能是下劃線和字母 
/^([a-zA-z_]{1})([/w]*)$/g.test(str) 
4.4 字符串替換函數.Replace(); 
5、瀏覽器類 
5.1 判斷瀏覽器的類型 
window.navigator.appName 
5.2 判斷ie的版本 
window.navigator.appVersion 
5.3 判斷客戶端的分辨率 
window.screen.height; window.screen.width; 

6、結合類 
6.1 email的判斷。 
function ismail(mail) 

return(new RegExp(/^/w+((-/w+)|(/./w+))*/@[A-Za-z0-9]+((/.|-)[A-Za-z0-9]+)*/.[A-Za-z0-9]+$/).test(mail)); 

6.2 手機號碼的驗證 
6.3 身份證的驗證 
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("輸入的數字位數不對!"); 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("輸入的身份證號 "+ a[0] +" 裏出生日期不對!"); return false;} 

return true; 


3.7 複選框的全選,多選,全不選,反選 
<form name=hrong> 
<input type=checkbox name=All οnclick="checkAll('mm')">全選<br/> 
<input type=checkbox name=mm οnclick="checkItem('All')"><br/> 
<input type=checkbox name=mm οnclick="checkItem('All')"><br/> 
<input type=checkbox name=mm οnclick="checkItem('All')"><br/> 
<input type=checkbox name=mm οnclick="checkItem('All')"><br/> 
<input type=checkbox name=mm οnclick="checkItem('All')"><br/><br/> 


<input type=checkbox name=All2 οnclick="checkAll('mm2')">全選<br/> 
<input type=checkbox name=mm2 οnclick="checkItem('All2')"><br/> 
<input type=checkbox name=mm2 οnclick="checkItem('All2')"><br/> 
<input type=checkbox name=mm2 οnclick="checkItem('All2')"><br/> 
<input type=checkbox name=mm2 οnclick="checkItem('All2')"><br/> 
<input type=checkbox name=mm2 οnclick="checkItem('All2')"><br/> 

</form> 

<SCRIPT LANGUAGE="JavaScript"> 
function checkAll(str) 

var a = document.getElementsByName(str); 
var n = a.length; 
for (var i=0; i<n; i++) 
a[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<a.length; i++) 

if (!a[i].checked){ all.checked = false; break;} 


else all.checked = false; 

</SCRIPT> 

3.8 文件上傳過程中判斷文件類型 
<input type=file οnchange="alert(this.value.match(/^(.*)(/.)(.{1,8})$/)[3])"> 

畫圖: 
<OBJECT 
id=S 
style="LEFT: 0px; WIDTH: 392px; TOP: 0px; HEIGHT: 240px" 
height=240 
width=392 
classid="clsid:369303C2-D7AC-11D0-89D5-00A0C90833E6"> 
</OBJECT> 
<SCRIPT> 
S.DrawingSurface.ArcDegrees(0,0,0,30,50,60); 
S.DrawingSurface.ArcRadians(30,0,0,30,50,60); 
S.DrawingSurface.Line(10,10,100,100); 
</SCRIPT> 

寫註冊表: 
<SCRIPT> 
var WshShell = WScript.CreateObject("WScript.Shell"); 
WshShell.RegWrite ("HKCU//Software//ACME//FortuneTeller//", 1, "REG_BINARY"); 
WshShell.RegWrite ("HKCU//Software//ACME//FortuneTeller//MindReader", "Goocher!", "REG_SZ"); 
var bKey = WshShell.RegRead ("HKCU//Software//ACME//FortuneTeller//"); 
WScript.Echo (WshShell.RegRead ("HKCU//Software//ACME//FortuneTeller//MindReader")); 
WshShell.RegDelete ("HKCU//Software//ACME//FortuneTeller//MindReader"); 
WshShell.RegDelete ("HKCU//Software//ACME//FortuneTeller//"); 
WshShell.RegDelete ("HKCU//Software//ACME//"); 
</SCRIPT> 

TABLAE相關(客戶端動態增加行列) 
<HTML> 
<SCRIPT LANGUAGE="JScript"> 
function numberCells() { 
var count=0; 
for (i=0; i < document.all.mytable.rows.length; i++) { 
for (j=0; j < document.all.mytable.rows(i).cells.length; j++) { 
document.all.mytable.rows(i).cells(j).innerText = count; 
count++; 



</SCRIPT> 
<BODY οnlοad="numberCells()"> 
<TABLE id=mytable border=1> 
<TR><TH>&nbsp;</TH><TH>&nbsp;</TH><TH>&nbsp;</TH><TH>&nbsp;</TH></TR> 
<TR><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR> 
<TR><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD></TR> 
</TABLE> 
</BODY> 
</HTML> 

1.身份證嚴格驗證: 

<script> 
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"雲南",54:"西藏",61:"陝西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"} 

function cidInfo(sId){ 
var iSum=0 
var info="" 
if(!/^/d{17}(/d|x)$/i.test(sId))return false; 
sId=sId.replace(/x$/i,"a"); 
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地區"; 
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2)); 
var d=new Date(sBirthday.replace(/-/g,"/")) 
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日"; 
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) 
if(iSum%11!=1)return "Error:非法證號"; 
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女") 


document.write(cidInfo("380524198002300016"),"<br/>"); 
document.write(cidInfo("340524198002300019"),"<br/>") 
document.write(cidInfo("340524197711111111"),"<br/>") 
document.write(cidInfo("34052419800101001x"),"<br/>"); 
</script> 

2.驗證IP地址 
<SCRIPT LANGUAGE="JavaScript"> 
function isip(s){ 
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 


var s="202.197.78.129"; 
alert(isip(s)) 
</SCRIPT> 



3.加sp1後還能用的無邊框窗口!! 
<HTML XMLNS:IE> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<IE:Download ID="include" STYLE="behavior:url(#default#download)" /> 
<title>Chromeless Window</title> 

<SCRIPT LANGUAGE="JScript"> 
/*--- Special Thanks For andot ---*/ 

/* 
This following code are designed and writen by Windy_sk <[email protected]
You can use it freely, but u must held all the copyright items! 
*/ 

/*--- Thanks For andot Again ---*/ 

var CW_width = 400; 
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(οnmοuseοut=οnmοuseup=function(){this.style.borderStyle='outset'}, οnmοusedοwn=function(){if(event.button!=2)this.style.borderStyle='inset'});background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;"; 

//Build Window 
include.startDownload(CW_url, function(source){content=source}); 

function insert_content(){ 
var temp = ""; 
CW_Body.style.overflow = "hidden"; 
CW_Body.style.backgroundColor = "white"; 
CW_Body.style.border = "solid black 1px"; 
content = content.replace(/<a ([^>]*)>/g,"<a οnclick='parent.open(this.href);return false' $1>"); 
temp += "<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>"; 
temp += "<tr style=';font-size:12px;background:#0099CC;height:20;cursor:default' οndblclick=/"Max.innerText=Max.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();/" οnmοuseup='parent.drag_up(event)' οnmοusemοve='parent.drag_move(event)' οnmοusedοwn='parent.drag_down(event)' onselectstart='return false' οncοntextmenu='return false'>"; 
temp += "<td style='color:#ffffff;padding-left:5px'>Chromeless Window For IE6 SP1</td>"; 
temp += "<td style='color:#ffffff;padding-right:5px;' align=right>"; 
temp += "<span id=Help οnclick=/"alert('Chromeless Window For IE6 SP1 - Ver 1.0//n//nCode By Windy_sk//n//nSpecial Thanks For andot')/" style=/""+CSStext+"font-family:System;padding-right:2px;/">?</span>"; 
temp += "<span id=Min οnclick='parent.New_CW.hide();parent.blur()' style=/""+CSStext+"font-family:Webdings;/" title='Minimum'>0</span>"; 
temp += "<span id=Max οnclick=/"this.innerText=this.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();/" style=/""+CSStext+"font-family:Webdings;/" title='Maximum'>1</span>"; 
temp += "<span id=Close οnclick='parent.opener=null;parent.close()' style=/""+CSStext+"font-family:System;padding-right:2px;/" title='Close'>x</span>"; 
temp += "</td></tr><tr><td colspan=2>"; 
temp += "<div id=include style='overflow:scroll;overflow-x:hidden;overflow-y:auto; HEIGHT: 100%; width:"+CW_width+"'>"; 
temp += content; 
temp += "</div>"; 
temp += "</td></tr></table>"; 
CW_Body.innerHTML = temp; 


setTimeout("insert_content()",1000); 

var if_max = true; 
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"; 


}else{ 
New_CW.show(0, 0, screen.width, screen.height); 
New_CW.document.all.include.style.width = screen.width; 



window.onfocus = show_CW; 
window.onresize = show_CW; 

// Move Window 
var drag_x,drag_y,draging=false 

function drag_move(e){ 
if (draging){ 
New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height); 
return false; 



function drag_down(e){ 
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(); 


function drag_up(e){ 
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; 


</SCRIPT> 
</HTML> 

電話號碼的驗證 

要求: 
  (1)電話號碼由數字、"("、")"和"-"構成 
  (2)電話號碼爲3到8位 
  (3)如果電話號碼中包含有區號,那麼區號爲三位或四位 
  (4)區號用"("、")"或"-"和其他部分隔開 
  (5)移動電話號碼爲11或12位,如果爲12位,那麼第一位爲0 
  (6)11位移動電話號碼的第一位和第二位爲"13" 
  (7)12位移動電話號碼的第二位和第三位爲"13" 
  根據這幾條規則,可以與出以下正則表達式: 
  (^[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 οnclick="PhoneCheck(document.all.iphone.value)" value="Check"> 

具有在輸入非數字字符不回顯的效果,即對非數字字符的輸入不作反應。 
function numbersonly(field,event){ 
var key,keychar; 
if(window.event){ 
key = window.event.keyCode; 

else if (event){ 
key = event.which; 

else{ 
return true 

keychar = String.fromCharCode(key); 
if((key == null)||(key == 0)||(key == 8)||(key == 9)||(key == 13)||(key == 27)){ 
return true; 

else if(("0123456789.").indexOf(keychar)>-1){ 
window.status = ""; 
return true; 

else { 
window.status = "Field excepts numbers only"; 
return false; 



驗證ip 

str=document.RegExpDemo.txtIP.value; 
if(/^(/d{1,3})/.(/d{1,3})/.(/d{1,3})/.(/d{1,3})$/.test(str)==false) 

window.alert('錯誤的IP地址格式'); 
document.RegExpDemo.txtIP.select(); 
document.RegExpDemo.txtIP.focus(); 
return; 

if(RegExp.$1<1 || RegExp.$1>254||RegExp.$2<0||RegExp.$2>254||RegExp.$3<0||RegExp.$3>254||RegExp.$4<1||RegExp.$4>254) 

window.alert('錯誤的IP地址'); 
document.RegExpDemo.txtIP.select(); 
document.RegExpDemo.txtIP.focus(); 
return; 

//剔除 如 010.020.020.03 前面 的0 
var str=str.replace(/0(/d)/g,"$1"); 
str=str.replace(/0(/d)/g,"$1"); 
window.alert(str); 


//一下是取數據的類 
//Obj參數指定數據的來源(限定Table),默認第一行爲字段名稱行 
//GetTableData類提供MoveNext方法,參數是表的行向上或向下移動的位數,正數向下移動,負數向上. 
//GetFieldData方法獲得指定的列名的數據 
//Sort_desc方法對指定的列按降序排列 
//Sort_asc方法對指定的列按升序排列 
//GetData方法返回字段值爲特定值的數據數組,提供數據,可以在外部進行其他處理 
//Delete方法刪除當前記錄,數組減少一行 
//初始化,Obj:table的名字,Leftlen:左面多餘數據長度,Rightlen:右面多餘數據長度, 
function GetTableData(Obj,LeftLen,RightLen){ 
var MyObj=document.all(Obj); 
var iRow=MyObj.rows.length; 
var iLen=MyObj.rows[0].cells.length; 
var i,j; 

TableData=new Array(); 
for (i=0;i< iRow;i++){ 
TableData[i]=new Array(); 
for (j=0;j<iLen;j++){ 
TableStr=MyObj.rows(i).cells(j).innerText; 
TableStr=TableStr.substring(LeftLen, TableStr.length-RightLen).Trim(); 
TableStr=TableStr.replace(/ /gi,"").replace(//r/n/ig,""); 
TableData[i][j]=TableStr; 



this.TableData=TableData; 
this.cols=this.TableData[0].length; 
this.rows=this.TableData.length; 
this.rowindex=0; 



function movenext(Step){ 
if (this.rowindex>=this.rows){ 
return 


if (Step=="" || typeof(Step)=="undefined") { 
if (this.rowindex<this.rows-1) 
this.rowindex++; 
return; 


else{ 
if (this.rowindex + Step<=this.rows-1 && this.rowindex + Step>=0 ){ 
this.rowindex=this.rowindex + Step; 

else 

if (this.rowindex + Step<0){ 
this.rowindex= 0; 
return; 

if (this.rowindex + Step>this.rows-1){ 
this.rowindex= this.rows-1; 
return; 






function getfielddata(Field){ 
var colindex=-1; 
var i=0; 
if (typeof(Field) == "number"){ 
colindex=Field; 

else 

for (i=0;i<this.cols && this.rowindex<this.rows ;i++){ 
if (this.TableData[0][i]==Field){ 
colindex=i; 
break; 



if (colindex!=-1) { 
return this.TableData[this.rowindex][colindex]; 






function sort_desc(){//降序 
var colindex=-1; 
var highindex=-1; 
desc_array=new Array(); 
var i,j; 
for (n=0; n<arguments.length; n++){ 
Field=arguments[arguments.length-1-n]; 
for (i=0;i<this.cols;i++){ 
if (this.TableData[0][i]==Field){ 
colindex=i; 
break; 


if ( colindex==-1 ) 
return; 
else 

desc_array[0]=this.TableData[0]; 
for(i=1;i<this.rows;i++){ 
desc_array[i]=this.TableData[1]; 
highindex=1; 
for(j=1;j<this.TableData.length;j++){ 
if (desc_array[i][colindex]<this.TableData[j][colindex]){ 
desc_array[i]=this.TableData[j]; 
highindex=j; 



if (highindex!=-1) 
this.TableData=this.TableData.slice(0,highindex).concat(this.TableData.slice(highindex+1,this.TableData.length)); 




this.TableData=desc_array; 

return; 




function sort_asc(){//升序 
var colindex=-1; 
var highindex=-1; 
var i,j; 
for (n=0; n<arguments.length; n++){ 
asc_array=new Array(); 
Field=arguments[arguments.length-1-n]; 
for (i=0;i<this.cols;i++){ 
if (this.TableData[0][i]==Field){ 
colindex=i; 
break; 


if ( colindex==-1 ) 
return; 
else 

asc_array[0]=this.TableData[0]; 
for(i=1;i<this.rows;i++){ 
asc_array[i]=this.TableData[1]; 
highindex=1; 
for(j=1;j<this.TableData.length;j++){//找出最小的列值 
if (asc_array[i][colindex]>this.TableData[j][colindex]){ 
asc_array[i]=this.TableData[j]; 
highindex=j; 




if (highindex!=-1) 
this.TableData=this.TableData.slice(0,highindex).concat(this.TableData.slice(highindex+1,this.TableData.length)); 





this.TableData=asc_array; 

return; 




function getData(Field,FieldValue){ 
var colindex=-1; 
var i,j; 

GetData=new Array(); 
if (typeof(Field)=="undefined" || typeof(FieldValue)=="undefined" ){ 
return this.TableData; 


for(j=0;j<this.cols;j++){ 
if (this.TableData[0][j]==Field){ 
colindex=j; 


if (colindex!=-1){ 

for(i=1;i<this.rows;i++){ 
if (this.TableData[i][colindex]==FieldValue){ 
GetData[i]=new Array(); 
GetData[i]=this.TableData[i]; 



return GetData; 

function DeletE(){ 
this.TableData=this.TableData.slice(0,this.rowindex).concat(this.TableData.slice(this.rowindex+1,this.TableData.length)); 
this.rows=this.TableData.length; 
return; 

function updateField(Field,FieldValue){ 
var colindex=-1; 
var i=0; 
if (typeof(Field) == "number"){ 
colindex=Field; 

else 

for (i=0;i<this.cols && this.rowindex<this.rows ;i++){ 
if (this.TableData[0][i]==Field){ 
colindex=i; 
break; 



if (colindex!=-1) { 
this.TableData[this.rowindex][colindex]=FieldValue; 




function movefirst(){ 
this.rowindex=0; 

function movelast(){ 
this.rowindex=this.rows-1; 

function String.prototype.Trim() {return this.replace(/(^/s*)|(/s*$)/g,"");} 
GetTableData.prototype.MoveNext = movenext; 
GetTableData.prototype.GetFieldData = getfielddata; 
GetTableData.prototype.Sort_asc = sort_asc; 
GetTableData.prototype.Sort_desc = sort_desc; 
GetTableData.prototype.GetData = getData; 
GetTableData.prototype.Delete = DeletE; 
GetTableData.prototype.UpdateField = updateField; 
GetTableData.prototype.MoveFirst = movefirst; 

具體的例子:http://202.119.73.208/NetEAn/com/test/jsprint.htm 

在每個文本框的onblur事件中調用校驗代碼,並且每個文本框中onKeyDown事件中寫一個enter轉tab函數 

//回車鍵換爲tab 
function enterToTab() 

if(event.srcElement.type != 'button' && event.srcElement.type != 'textarea' 
&& event.keyCode == 13) 

event.keyCode = 9; 

}

轉自:http://blog.csdn.net/littlekeen/archive/2005/10/13/502551.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章