每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
          最近關心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks

          key words:正則表達式 ?模式匹配 javascript

          摘要:收集一些常用的正則表達式。

          正則表達式用于字符串處理,表單驗證等場合,實用高效,但用到時總是不太把握,以致往往要上網(wǎng)查一番。我將一些常用的表達式收藏在這里,作備忘之用。本貼隨時會更新。

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

          匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]

          應用:計算字符串的長度(一個雙字節(jié)字符長度計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函數(shù),我們就可以利用這個表達式來實現(xiàn),如下:

          String.prototype.trim = function()

          {
          ??? return this.replace(/(^\s*)|(\s*$)/g, "");
          }

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

          下面是利用正則表達式匹配IP地址,并將IP地址轉換成對應數(shù)值的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函數(shù)來分解可能更簡單,程序如下:

          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+)*

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

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

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

          利用正則表達式限制網(wǎng)頁表單里的文本框輸入內(nèi)容:

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

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

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

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

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

          "^[A-Za-z0-9_]*$"

          posted on 2006-08-29 15:02 Alex 閱讀(591) 評論(1)  編輯  收藏 所屬分類: web技術

          評論

          # re: [zt]經(jīng)典正則表達式 2007-12-18 12:36 大蘿卜
          錯誤的蠻多的.
          歪打正著的也有一些.
          比如ip的,每個區(qū)段是0-255,這樣每個小段的表達式為([012]?\d{1,2}),更糟糕的是,對于進制的理解,如果要將地址轉化為數(shù)字,每個區(qū)段的進制,應該是不小于256的表達,否則的話,如lz這樣,1.255 == 2.0,10進制的每個位置上,沒有大于9的表達,16進制上的每位,也沒大于15的表達;
          漢字的編碼區(qū)段,大概是那個范圍,但確切的不是;
          html的tag里面,也有一些是不能使用的字符,例如空格;
          提取url里面文件名稱的,也是錯誤.  回復  更多評論
            

          主站蜘蛛池模板: 铜梁县| 翁牛特旗| 石泉县| 海南省| 开封县| 海门市| 特克斯县| 信阳市| 平泉县| 周口市| 大新县| 清苑县| 任丘市| 静安区| 濮阳市| 孝感市| 遂川县| 枝江市| 大埔县| 连城县| 泌阳县| 淅川县| 嫩江县| 九龙城区| 平罗县| 綦江县| 五河县| 隆化县| 白朗县| 颍上县| 手游| 汶上县| 绥中县| 兴业县| 巴彦淖尔市| 清涧县| 临安市| 湖南省| 和平县| 武山县| 镇坪县|