当前位置: 首页 > news >正文

[JS] 常用正则表达式集(一)

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

 

评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 

 

 

 

匹配双字节字符(包括汉字在内):[^/x00-/xff] 

 

评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 

 

 

 

匹配空白行的正则表达式:/n/s*/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个英文字母或者下划线组成的字符串 

 

评注:最基本也是最常用的一些表达式 

 

 

 

整理出来的一些常用的正则表达式 所属分类: JScript (三) 

 

Email : /^/w+([-+.]/w+)*@/w+([-.]//w+)*/./w+([-.]/w+)*$/ 

 

isEmail1 : /^/w+([/./-]/w+)*/@/w+([/./-]/w+)*/./w+$/; 

 

isEmail2 : /^.*@[^_]*$/; 

 

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+$/ 

 

Code : /^[1-9]/d{5}$/ 

 

QQ : /^[1-9]/d{4,8}$/ 

 

Integer : /^[-/+]?/d+$/ 

 

Double : /^[-/+]?/d+(/./d+)?$/ 

 

English : /^[A-Za-z]+$/ 

 

Chinese : /^[/u0391-/uFFE5]+$/ 

 

UnSafe : /^(([A-Z]*|[a-z]*|/d*|[-_/~!@#/$%/^&/*/./(/)/[/]/{/}<>/?/'/"]*)|.{0,5})$|/s/ 

 

PassWord :^[//w]{6,12}$ 

 

ZipCode : ^[//d]{6} 

 

/^(/+/d+ )?(/(/d+/) )?[/d ]+$/; //这个是国际通用的电话号码判断 

 

/^(1[0-2]/d|/d{1,2})$/; //这个是年龄的判断 

 

/^/d+/./d{2}$/; //这个是判断输入的是否为货币值 

 

<!-- IP地址有效性验证函数--> 

 

<script language=javascript runat=server> 

 

    ip_ip = '(25[0-5]|2[0-4]//d|1//d//d|//d//d|//d)'; 

 

    ip_ipdot = ip + '//.'; 

 

    isIPaddress = new RegExp('^'+ip_ipdot+ip_ipdot+ipdot+ip_ip+'$'); 

 

</script> 

 

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 

 

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

 

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下: 

 

String.prototype.trim = function() 

 

 

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

 

 

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

 

匹配HTML标记的正则表达式:/<(.*)>.*<///1>|<(.*) //>/ 

 

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

 

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

 

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

 

 

 

^/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 

 

 

 

利用正则表达式分解和转换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)) 

 

 

 

用正则表达式限制只能输入中文:οnkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/u4E00-/u9FA5]/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,''))" 

 

 

 

更改日期格式 

 

以下代码示例使用 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 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便 

 

 

 

提取 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}"); 

 

 

 

 

利用正则表达式去除字串中重复的字符的算法程序: 

 

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 

 

 

 

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1 

 

s="http://www.9499.net/page1.htm" 

 

s=s.replace(/(.*//){0,}([^/.]+).*/ig,"$2") 

 

alert(s) 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jxf111348/archive/2009/03/22/4014694.aspx

相关文章:

  • Android调用系统照相机
  • ubuntu10.04+win7双系统,重装win7后,恢复grub引导菜单
  • ThinkPad E40上安装MAC OS
  • mac 安装 VMWare tools
  • java.lang.OutOfMemoryError: bitmap size exceeds VM budget
  • 解决android的logcat中文输出
  • android设置控件属性 新玩法
  • Android 控件背景颜色处理
  • Android完全退出程序问题综述
  • 打印Android程序所占内存
  • TraceView + 避免内存泄露, 有效利用内存
  • Android 开源项目列表
  • Android 软件安装程序(*.apk)的结构分析、反编译以及汉化
  • android 内存使用
  • android 常用adb shell
  • 分享的文章《人生如棋》
  • Asm.js的简单介绍
  • ComponentOne 2017 V2版本正式发布
  • css的样式优先级
  • GraphQL学习过程应该是这样的
  • JSONP原理
  • js如何打印object对象
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Laravel 实践之路: 数据库迁移与数据填充
  • Python 反序列化安全问题(二)
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 阿里云前端周刊 - 第 26 期
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 面试遇到的一些题
  • 入口文件开始,分析Vue源码实现
  • 山寨一个 Promise
  • 使用putty远程连接linux
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 小程序 setData 学问多
  • 一个JAVA程序员成长之路分享
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #define,static,const,三种常量的区别
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (07)Hive——窗口函数详解
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)计算机毕业设计大学生兼职系统
  • (黑马C++)L06 重载与继承
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四)汇编语言——简单程序
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .bashrc在哪里,alias妙用
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net网站发布-允许更新此预编译站点