2012年11月

收集JavaScript常用正则表达式大全

下面都是我收集的一些比较常用的正则表达式,因为平常可能在表单验证的时候,用到的比较多。特发出来,让各位朋友共同使用。呵呵。
匹配中文字符的正则表达式: [u4e00-u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^x00-xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:ns*r
评注:可以用来删除空白行
匹配HTML标记的正则表达式:< (S*?)[^>]*>.*?|< .*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^s*|s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]d{5}(?!d)
评注:中国邮政编码为6位数字
匹配身份证:d{15}|d{18}
评注:中国的身份证为15位或18位
匹配ip地址:d+.d+.d+.d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]d*$    //匹配正整数
^-[1-9]d*$   //匹配负整数
^-?[1-9]d*$   //匹配整数
^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:
只能输入数字:“^[0-9]*$”
只能输入n位的数字:“^d{n}$”
只能输入至少n位数字:“^d{n,}$”
只能输入m-n位的数字:“^d{m,n}$”
只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
只能输入非零的正整数:“^+?[1-9][0-9]*$”
只能输入非零的负整数:“^-[1-9][0-9]*$”
只能输入长度为3的字符:“^.{3}$”
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
只能包含字符、数字和下划线。
验证是否含有^%&’,;=?$”等字符:“[^%&’,;=?$x22]+”
只能输入汉字:“^[u4e00-u9fa5],{0,}$”
验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$”
正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,
“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
验证身份证号(15位或18位数字):“^d{15}|d{}18$”
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
正确格式为:“01”“09”和“1”“31”。
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/< (.*)>.*|< (.*) />/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
(1)应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^x00-xff]/g,”aa”).length;}
(2)应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, “”);
}
(3)应用:利用正则表达式分解和转换IP地址
function IP2V(ip) //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!”)
}
}
(4)应用:从URL地址中提取文件名的javascript程序
s=”http://www.java-zone.org/1157.html ”;
s=s.replace(/(.*/){0,}([^.]+).*/ig,”$2″) ; //Page1.htm
(5)应用:利用正则表达式限制网页表单里的文本框输入内容
用正则表达式限制只能输入中文:onkeyup=”value=”/blog/value.replace(/[”^u4E00-u9FA5] /g,”)”onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^u4E00-u9FA5]/g,”))”
用正则表达式限制只能输入全角字符:onkeyup=”value=”/blog/value.replace(/[”^uFF00-uFFFF] /g,”) ”onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^uFF00-uFFFF]/g,”))”
用正则表达式限制只能输入数字:onkeyup=”value=”/blog/value.replace(/[”^d] /g,”)“onbeforepaste=“clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))”
用正则表达式限制只能输入数字和英文:onkeyup=”value=”/blog/value.replace(/[W] /g,””)“onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”

IE中自定义元素的event事件无效的原因及处理方法

今天终于又一次征服了万恶的IE,先来讲讲需求吧,现在web上很流行鼠标手势支持,但是本身不支持所以只能自己写了,思路是这样的,当按下鼠标左键的时 候开始画点,直到放开鼠标按键为止。由于IE下我没有想到比较好的元素来做点所以随便自己create了一个元素xdTrailDot。然后自己定义长度 和高度。问题来了,自己定义的element的event事件在调用的时候IE并没有将window.event这个对象传进来。导致事件无法气泡,不过 还好IE下事件是串行行的,所以IE不传Event我们可以直接用调用window.event并且手工调用 Element.fireEvent('eventnname',event)来构建事件chain。

  1. function PageScreen(){
  2.   var t=this;
  3.   var body=document.body;
  4.   t.clientWidth=body.clientWidth;
  5.   t.clientHeight=body.clientHeight;
  6.   t.scrollWidth=body.scrollWidth;
  7.   t.scrollHeight=body.scrollHeight<1024?window.screen.availHeight:body.scrollHeight;
  8.   t.startDraw=false;
  9. }
  10. PageScreen.prototype.markFullScreen=function(){
  11.   var t=this;
  12.   if(!t.markDiv){
  13.     var markDiv=document.createElement('div');
  14.     markDiv.id='PageScreen-markDiv';
  15.     st=markDiv.style;
  16.      st.position='absolute';
  17.     st.left='0px';
  18.     st.top='0px';
  19.     st.backgroundColor='#FFAC56';
  20.     st.filter='Alpha(Opacity=50)';
  21.     st.height=t.scrollHeight+'px';
  22.     st.width=t.scrollWidth+'px';
  23.     t.boundleEvent(markDiv);
  24.     document.body.appendChild(markDiv);
  25.     t.markDiv=markDiv;
  26.   }
  27. }
  28. PageScreen.prototype.preDraw=function(){
  29.   var t=this;
  30.   t._trailOffsetX = document.body.offsetWidth;//docBox.screenX;
  31.     t._trailOffsetY = document.body.offsetHeight;
  32.   t.lastDotX=null;
  33.   t.lastDotY=null;
  34.   t.lastDot=null;
  35.   if(!t._trailArea){
  36.     var _trailArea=document.createElement('xDTrailArea');
  37.     document.body.appendChild(_trailArea);
  38.     t._trailArea=_trailArea;
  39.   }
  40.   if(!t._trailDot){
  41.     var _trailDot=document.createElement('xdTrailDot');
  42.     _trailDot.style.width       = "3px";
  43.     _trailDot.style.height      = "3px";
  44.     _trailDot.style.background  = "#ff0000";
  45.     _trailDot.style.border      = "0px";
  46.     _trailDot.style.position    = "absolute";
  47.     _trailDot.style.zIndex      = 2147483647;
  48.     t._trailDot=_trailDot;
  49.   }
  50. }
  51. PageScreen.prototype.draw=function(e){
  52.   var t=this,x=e.x,y=e.y;
  53.   t.lastDotX=t.lastDotX!=null?t.lastDotX:e.x;
  54.   t.lastDotY=t.lastDotY!=null?t.lastDotY:e.y;
  55.   t.drawDot(t.lastDotX,t.lastDotY,x,y);
  56. }
  57. PageScreen.prototype.drawDot=function(sx,sy,dx,dy){
  58.   if(!this._trailArea) return;
  59.   var xm=dx-sx;
  60.   var ym=dy-sy;
  61.   var xDecrement=xm<0?1:-1;
  62.   var yDecrement=ym<0?1:-1;
  63.   if (Math.abs(xm) >= Math.abs(ym)){
  64.     for (var i = xm; i != 0; i += xDecrement)
  65.       this.strokeDot(dx - i, dy - Math.round(ym * i / xm));
  66.     //this.addInfo('-------->Xmove-done,'+xDecrement);
  67.   }else{
  68.     for (var i = ym; i != 0; i += yDecrement)
  69.       this.strokeDot(dx - Math.round(xm * i / ym), dy - i);
  70.     //this.addInfo('-------->Ymove-done,'+yDecrement);
  71.   }
  72. }
  73. PageScreen.prototype.strokeDot=function(x,y){
  74.   var t=this;
  75.   if (t.lastDot && t.lastDotY && t.lastDotY === y) {
  76.         var w = t.lastDotW + Math.abs(t.lastDotX - x) + 3 ;
  77.         t.lastDot.style.width = w + "px";
  78.         t.lastDot.style.left  = (t.lastDotX < x ? t.lastDotX : x) + "px";
  79.         return;
  80.     }else if (t.lastDot && t.lastDotX === x) {
  81.         var h = t.lastDotH + Math.abs(t.lastDotY - y) + 3;
  82.         t.lastDot.style.height = h + "px";
  83.         t.lastDot.style.top = (t.lastDotY < y ? t.lastDotY : y) + "px";
  84.         return;
  85.     }
  86.     var dot = t._trailDot.cloneNode(true);
  87.   dot.onmouseup=function(e){
  88.     e=e||window.event;
  89.     t.markDiv.fireEvent('onmouseup',e);
  90.   };
  91.     dot.style.left = x + "px";
  92.     dot.style.top = y + "px";
  93.   t.lastDotX = x;
  94.     t.lastDotY = y;
  95.     t.lastDotW = 1;
  96.     t.lastDotH = 1;
  97.   //t.addInfo('draw('+x+','+y+')');
  98.   t._trailArea.appendChild(dot);
  99.     t.lastDot=dot;
  100. }
  101. PageScreen.prototype.cleanUp=function(){
  102.   var t=this;
  103.   if(t._trailArea){
  104.     t._trailArea.innerHTML="";
  105.   }
  106. }
  107. PageScreen.prototype.boundleEvent=function(elem){
  108.   var addInfo=this.addInfo;
  109.   var self=this;
  110.   var mu=function(e){
  111.   if(e.button==1 || e.button==2){
  112.       if (e.button==2)
  113.         e.cancelBubble=true;
  114.     self.startDraw=false;self.addInfo('stop-draw');
  115.     self.cleanUp.call(self);
  116.     }
  117.     if(e.button==2)
  118.       return false;
  119.   };
  120.   var md=function(e){
  121.     self.startDraw=true;self.addInfo('start-draw');
  122.     self.preDraw.call(self);
  123.   };
  124.   var mv=function(e){
  125.     if(self.startDraw==false) return;
  126.     self.draw.call(self,e);
  127.   };
  128.   elem.attachEvent('onmouseup',mu);
  129.   elem.attachEvent('onmousedown',md);
  130.   elem.attachEvent('onmousemove',mv);
  131. }
  132. PageScreen.prototype.showPageInfo=function(){
  133.   var infoDiv=document.getElementById('PageScreen-infoDiv');
  134.   if(!infoDiv){
  135.     var el=document.createElement('div');
  136.     var st=el.style;
  137.     el.id='PageScreen-infoDiv';
  138.     st.position='absolute';
  139.     st.left='0px';
  140.     st.bottom='0px';
  141.     st.backgroundColor='#FFAC56';
  142.     st.height='100px';
  143.     st.width=this.clientWidth+'px';
  144.     st.border='1px solid';
  145.     st.overflowY='scroll';
  146.     st.overflowX='hidden';
  147.     st.scrollBarArrowColor='#48b4fc';
  148.     st.scrollBarBaseColor='#bbeeff';
  149.     document.body.appendChild(el);
  150.     infoDiv=el;
  151.   }
  152.   return infoDiv;
  153. }
  154. PageScreen.prototype.addInfo=function(infoData){
  155.   var infoDiv=this.showPageInfo();
  156.   if(!this.infoDivUl){
  157.     var infoDivUl=document.createElement('ul');
  158.     infoDiv.appendChild(infoDivUl);
  159.     this.infoDivUl=infoDivUl;
  160.   }
  161.   if(infoData.constructor == String){
  162.     var li=document.createElement('li');
  163.     li.innerHTML=infoData;
  164.     this.infoDivUl.insertBefore(li,this.infoDivUl.firstChild);
  165.   }
  166. }

本文转自:http://blog.csdn.net/hxshandle/article/details/4435697

IE和FireFox里div透明效果的实现

IE和FireFox里div透明效果的实现

ie里
style.filter='Alpha(Opacity=90)'
其透明度在0-100间取值 0为全透明

ff里通过
style.MozOpacity='0.9'
在0-1间取值 0为全透明

尊重作者原文在这里:http://zlele.blog.hexun.com/5511317_d.html

Java字符串的split拆分方法使用“|”竖线为分隔符的字符串方法

Java 竖线|的转义符 是 "\\|"

如下操作
String a = "a|b|c|d";
String[] b = a.split("\\|");//直接使用a.split("|")是错误的

for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}

在使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。

 

我们经常使用public String[] split(String regex)方法来拆分一个有分隔符的字符串,但是由于参数regex是一个 regular-expression的匹配模式而不是一个简单的String,所以他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代 码:用竖线 | 分隔字符串,你将得不到预期的结果

 

view plaincopy to clipboardprint?
String[] aa = "aaa|bbb|ccc".split("|"); //得不到预期的结果
//String[] aa = "aaa|bbb|ccc".split("\\|"); 这样才能得到正确的结果
for (int i = 0 ; i<aa.length ; i++ ) {
System.out.println("--"+aa[i]);
}
//用竖 * 分隔字符串运行将抛出异常,用加号 + 也是如此。
String[] aa = "aaa*bbb*ccc".split("*");
//String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果
for (int i = 0 ; i<aa.length ; i++ ) {
System.out.println("--"+aa[i]);
}

显然,+ * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的结果。

"|" 分隔串时虽然能够执行,但是却不是预期的目的,"\\|"转义后即可得到正确的结果。

还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果:

String[] aa = "aaa\\bbb\\bccc".split(\\\\);