- 浏览: 110782 次
- 性别:
- 来自: 湖南
文章分类
最新评论
-
liuyiisme:
[i][/i][b][/b][u][/u]
[url][ ...
JFileChooser -
xyc717:
你前面那黄色字颜色能在恶心点么……
this.form.el is undefined FormPanel或Panel加载数据 -
里克尔奇:
您好,谢谢你的文章,我测试了一下,但是视频没有充满播放器啊!急 ...
视频点播系统 -
就一剑1:
<s:intercept-url pattern=&qu ...
springside3.3.1 spring security -
yu11223344:
能把权限控制的xml的形式改成查数据库吗?
springside3.3.1 spring security
正则表达式实战
匹配结尾的数字
统一空格个数
判断字符串是不是由数字组成
电话号码正则
手机号码正则表达式
使用正则表达式实现删除字符串中的空格
限制文本框只能输入数字和小数点等等
替换小数点前内容为指定内容
只匹配中文的正则表达式
返回字符串的中文字符个数
正则表达式取得匹配IP地址前三段
匹配<ul>与<ul>之间的内容
用正则表达式获得文件名
绝对路径变相对路径
用户名正则
匹配英文地址
正则匹配价格
身份证号码的匹配
要求文本有指定行数
单词首字母大写
正则验证日期格式
去掉文件的后缀名
验证邮箱的正则表达式
匹配源代码中的链接
匹配链接的文字
正则判断标签是否闭合
用正则获得指定标签的内容
正则判断是否为数字与字母的混合
空格与英文同时存在
显示或者保存正则表达式匹配的部分内容
正则表达式替换变量
正则替换指定属性中的文本
将阿拉伯数字替换为中文大写形式
替换文本中的URL为链接
从HTML代码段删除指定标签极其内容
用正则给文本分段
转换源代码中的标签
给属性添加双引号
给table加上tbody
去掉标签的所有属性
正则替换特定单词
指定文字高亮显示
删除标签
错误贴
太难贴
匹配数字的“正则”
正则资源
关于测试代码
本文不是使用Dreamweaver编辑,以下测试代码可能已经在赋值粘贴的过程做了一些调整,可能执行失效。可以参看本文的pdf版本。
匹配结尾的数字
来源:如何用 javascript 正则表达式 取出字符串最后一组数字,谢谢
如
30CAC0040 取出40
3SFASDF92 取出92
正则如下:/\d+$/g
统一空格个数
来源:正则匹配空格的问题
字符串内字符键有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。
例如:蓝 色 理 想
变成:蓝 色 理 想
aobert的正则:
<script type="text/javascript">
var str="蓝 色 理 想"
var reg=/\s+/g
str = str.replace(reg," ")
document.write(str)
</script>
判断字符串是不是由数字组成
来源:有没有简单的方法判断字符串由数字组成?
这个正则比较简单,写了一个测试
<script type="text/javascript">
function isDigit(str){
var reg = /^\d*$/;
return reg.test(str);
}
var str = "7654321";
document.write(isDigit(str));
var str = "test";
document.write(isDigit(str));
</script>
电话号码正则
来源:想问一下关于电话号码的正则判断
:求一个验证电话号码的JS正则
/^\d{3,4}-\d{7,8}(-\d{3,4})?$/
区号必填为3-4位的数字,区号之后用“-”与电话号码连接
^\d{3,4}-
电话号码为7-8位的数字
\d{7,8}
分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接
(-\d{3,4})?
手机号码正则表达式
正则验证手机号,忽略前面的0,支持130-139,150-159。忽略前面0之后判断它是11位的。
cloeft的正则:
/^0*(13|15)\d{9}$/
^0*匹配掉开头任意数量的0。
由于手机号码是13任意数字9位,和15任意数字9位,所以可以用(13|15)\d{9}匹配。
测试代码如下:
function testReg(reg,str){
return reg.test(str);
}
var reg = /^0*(13|15)\d{9}$/;
var str = '13889294444';
var str2 = '12889293333';
var str3 = '23445567';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
使用正则表达式实现删除字符串中的空格:
来源:请问js中有没有去掉空格的函数
代码以及测试代码如下:
<script type="text/javascript">
//删除字符串两侧的空白字符。
function trim(str){
return str.replace(/^\s+|\s+$/g,'');
}
//删除字符串左侧的空白字符。
function ltrim(str){
return str.replace(/^\s+/g,'');
}
//删除字符串右侧的空白字符。
function rtrim(str){
return str.replace(/\s+$/g,'');
}
//以下为测试代码
var trimTest = " 123456789 ";
//前后各有一个空格。
document.write('length:'+trimTest.length+'<br />');
//使用前
document.write('ltrim length:'+ltrim(trimTest).length+'<br />');
//使用ltrim后
document.write('rtrim length:'+rtrim(trimTest).length+'<br />');
//使用rtrim后
document.write('trim length:'+trim(trimTest).length+'<br />');
//使用trim后
</script>
测试的结果如下:
length:11
ltrim length:10
rtrim length:10
trim length:9
限制文本框只能输入数字和小数点等等
来源:文本框输入限制的问题????
只能输入数字和小数点
var reg = /^\d*\.?\d{0,2}$/
开头有若干个数字,中间有0个或者一个小数点,结尾有0到2个数字。
只能输入小写的英文字母和小数点,和冒号,正反斜杠(:./\)
var reg = /[a-z\.\/\\:]+/;
a-z包括了小写的英文字母,\.是小数点,\/和\\分别是左右反斜线,最后是冒号。整个组成一个字符集和代码任一均可,最后在加上+,1或者多个。
替换小数点前内容为指定内容
来源:求一正则表达式!
请问 怎么把这个字符串的小数点前面的字符替换为我自定义的字符串啊?
例如:infomarket.php?id=197 替换为 test.php?id=197
应该可以把第一个点“.”之前的所有单词字符替换为test就可以了。我写的正则如下:
<script type="text/javascript">
var str = "infomarket.php?id=197";
var reg = /^\w*/ig;
//匹配字符串开头的任意个单词字符
str = str.replace(reg,'test');
document.write(str);
</script>
原帖的有点复杂,没太看明白。
只匹配中文的正则表达式
来源:关于上传的时候,只能选择中文名称的图片(是否可以用toASCII方法呢?)
前两天看的《JavaScript开发王》里恰好有中文的unicode范围,正则如下:
/[\u4E00-\u9FA5\uf900-\ufa2d]/
写了一个简单的测试,会把所有的中文替换成“哦”。
<script type="text/javascript">
var str = "有中文?and English.";
var reg = /[\u4E00-\u9FA5\uf900-\ufa2d]/ig;
str = str.replace(reg,'哦');
document.write(str);
</script>
返回字符串的中文字符个数
来源:有没返回中文字符字节的函数!
一般的字符长度对中文和英文都是不分别的 如JS里的length,那么如何返回字符串中中文字符的个数呢?guoshuang老师在原帖中给出了解决方案,我又没看懂……
不过我自己也想到了一个办法:先去掉非中文字符,再返回length属性。函数以及测试代码如下:
<script type="text/javascript">
function cLength(str){
var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
//匹配非中文的正则表达式
var temp = str.replace(reg,'');
return temp.length;
}
var str = "中文123";
document.write(str.length+'<br />');
document.write(cLength(str));
</script>
结果:
5
2
中文两个,数字三个,正确。
下面的测试也正确。
var str = "中文123tets@#!#%$#[][{}";
document.write(str.length+'<br />');
document.write(cLength(str));
正则表达式取得匹配IP地址前三段
来源:如何用正则取IP前3段
192.168.118.101,192.168.118.72, 192.168.118.1都替换成:192.168.118
只要匹配掉最后一段并且替换为空字符串就行了,正则如下:
/\.\d{1,3}$/
匹配结尾的.n,.nn或者.nnn。
测试代码如下:
function replaceReg(reg,str){
return str.replace(reg,'')
}
var reg = /\.\d{1,3}$/;
var str = '192.168.118.101';
var str2 = '192.168.118.72';
var str3 = '192.168.118.1';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
相似的有,这个帖子里有一个验证IP地址的方法:求检验MAC地址的正则表达例子
匹配<ul>与<ul>之间的内容
来源:请教个正则的小问题吧
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>
用正则可以得到 <ul>起到下个<ul> 之间的内容。
正则如下:
/<ul>[\s\S]+?<ul>/i
首先匹配两侧的ul标签,中间的[\s\S]+?可以匹配一个或者多个任意字符,一定要非贪婪,否则会匹配<ul>safsf<ul>safsf</ul><ul>。
用正则表达式获得文件名
来源:C:\006.jpg
c:\images\tupian\006.jpg
可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。
xlez的正则如下:
/[^\\\/]*[\\\/]+/g
首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。形如“xxx/”或者“xxx\”或者“/”或者“\”
函数以及测试代码:
<script type="text/javascript">
function getFileName(str){
var reg = /[^\\\/]*[\\\/]+/g;
//xxx\或者是xxx/
str = str.replace(reg,'');
return str;
}
var str = "c:\\images\\tupian\\006.jpg";
document.write(getFileName(str)+'<br />');
var str2 = "c:/images/tupian/test2.jpg";
document.write(getFileName(str2));
</script>
注意,\需要转义。
绝对路径变相对路径
来源:讨论一个正则
将<IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif">转换为:<IMG height="120" width="800" src="/image/somepic.gif">。
其中网址可能改变,例如http://localhost等等。
cloudchen的正则:
/http:\/\/[^\/]+/
首先是http://,然后[^\/]+找过1个或者多个非/字符,因为遇到第一个/表示已经到目录了,停止匹配。
测试代码如下:
<script type="text/javascript">
var str = '<IMG height="120" width="800" \
src="http://23.123.22.12/image/somepic.gif">';
var reg = /http:\/\/[^\/]+/;
str = str.replace(reg,"");
alert(str)
</script>
用户名正则
来源:求正则,急急呀!!
用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16个字符。
hansir和解决方案弄成正则:
/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/
中文字符或者单词字符,4到16个。实现4到16结成到正则里的关键就是开始^和结束$,这就等于整个字符串只能有这些匹配的内容,不能有多余的。
函数和测试代码如下:
<script type="text/javascript">
function isEmail(str){
var reg = /^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/;
return reg.test(str);
}
var str = '超级无敌用户名regExp';
var str2 = '捣乱的@';
var str3 = '太短'
var str4 = '太长longlonglonglonglonglonglonglong'
document.write(isEmail(str)+'<br />');
document.write(isEmail(str2)+'<br />');
document.write(isEmail(str3)+'<br />');
document.write(isEmail(str4)+'<br />');
</script>
匹配英文地址
来源:-求助- 正则问题
规则如下:
包含 "点", "字母","空格","逗号","数字",但开头和结尾不能是除字母外任何字符。
[\.a-zA-Z\s,0-9]这个字符集就实现了字母,空格,逗号和数字。最终正则如下:
/^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/
开头必须有字母,结束也必须是一个以上字母。测试代码如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/;
var str = 'No.8,ChangAn Street,BeiJing,China';
var str2 = '8.No,ChangAn Street,BeiJing,China';
var str3 = 'No.8,ChangAn Street,BeiJing,China88';
document.write(testReg(reg,str)+'<br />')
document.write(testReg(reg,str2)+'<br />')
document.write(testReg(reg,str3)+'<br />')
</script>
正则匹配价格
来源:为什么这个正则不起作用啊?急啊?
价格的格式应该如下:
开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。hansir给出的对应正则如下:
/^(\d*\.\d{0,2}|\d+).*$/
hansir给出的测试代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
function checkPrice(me){
if(!(/^(?:\d+|\d+\.\d{0,2})$/.test(me.value))){
me.value = me.value.replace(/^(\d*\.\d{0,2}|\d+).*$/,'$1');
}
}
</script>
</head>
<body>
<input type="text" onkeyup="checkPrice(this);"/>
</body>
</html>
身份证号码的匹配
来源:关于正则的,大家帮帮忙,急,在线等
身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字,正则如下:
/^(\d{14}|\d{17})(\d|[xX])$/
开头是14位或者17位数字,结尾可以是数字或者是x或者是X。
测试代码如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^(\d{14}|\d{17})(\d|[xX])$/;
var str = '123456789012345';//15位
var str2 = '123456789012345678';//18位
var str3 = '12345678901234567X';//最后一位是X
var str4 = '1234';//位数不对
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
要求文本有指定行数
来源:[求助]求一句正则表达式的写法
匹配至少两行的字符串,每行都为非空字符。
只要匹配到[\n\r]就表示有换行了,再保证换行的两段都不是空字符就可以了。正则如下:
/\S+?[\n\r]\S+?/i
这个正则的应用应该是用在textarea里,如果是如下要求:可以支持所有字符,中间可带空格,可以包括英文、数字、中文、标点
这样的话,只要针对空格再改一下就行了。(按照非空的要求,上面有不能匹配“字符+空格+换行+字符”的字符串)。修改如下:
/\S+?\s*?[\n\r]\s*?\S+?/i
单词首字母大写
来源:求个正则,处理英文单词或词组的
每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea
cloeft的正则:
/\b(\w)|\s(\w)/g
所谓“首字母”包括两种情况:第一种是边界(开头)的单词字符,一种是空格之后的新单词的第一个字母。测试代码如下:
<script type="text/javascript">
function replaceReg(reg,str){
str = str.toLowerCase();
return str.replace(reg,function(m){return m.toUpperCase()})
}
var reg = /\b(\w)|\s(\w)/g;
var str = 'blue idea';
var str2 = 'BLUE IDEA';
var str3 = 'Test \n str is no good!';
var str4 = 'final test';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
document.write(replaceReg(reg,str4)+'<br />');
</script>
正则验证日期格式
来源:yyyy-mm-dd的正则怎样写啊?
yyyy-mm-dd格式
正则如下:
/^\d{4}-\d{1,2}-\d{1,2}$/
4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。
测试代码如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/;
var str = '2008-8-8';
var str2 = '2008-08-08';
var str3 = '08-08-2008';
var str4 = '2008 08 08';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
第二种格式:来源:求一正则表达式
yyyy-mm-dd
或
yyyy/mm/dd
用“或”简单地修改一下就行了。
/^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}$/
去掉文件的后缀名
来源:求一个正则
www.abc.com/dc/fda.asp变为www.abc.com/dc/fda
如果文件后缀已知的话这个问题就非常简单了,正则如下:
/\.asp$/
匹配最后的.asp而已,测试代码如下:
<script type="text/javascript">
function delAspExtension(str){
var reg = /\.asp$/;
return str.replace(reg,'');
}
var str = 'www.abc.com/dc/fda.asp';
document.write(delAspExtension(str)+'<br />');
</script>
如果文件名未知的话就用这个正则:/\.\w+$/,测试代码如下:
<script type="text/javascript">
function delExtension(str){
var reg = /\.\w+$/;
return str.replace(reg,'');
}
var str = 'example.com/dc/fda.asp';
document.write(delExtension(str)+'<br />');
var str2 = 'test/regular/fda.do';
document.write(delExtension(str2)+'<br />');
var str3 = 'example.com/dc/fda.strange_extension';
document.write(delExtension(str3)+'<br />');
</script>
验证邮箱的正则表达式
来源:找javascript写的表单检查代码!
fuchangxi的正则:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者多个组合。
<script type="text/javascript">
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
return reg.test(str);
}
var str = 'test@hotmail.com';
document.write(isEmail(str)+'<br />');
var str2 = 'test@sima.vip.com';
document.write(isEmail(str2)+'<br />');
var str3 = 'te-st@qq.com.cn';
document.write(isEmail(str3)+'<br />');
var str4 = 'te_st@sima.vip.com';
document.write(isEmail(str4)+'<br />');
var str5 = 'te.._st@sima.vip.com';
document.write(isEmail(str5)+'<br />');
</script>
我不太了解邮箱的具体规则。感觉这个正则比较简单,EMAIL校验 正则 讨论 求解里有比较详细的邮箱正则讨论。
匹配源代码中的链接
来源:正则
能够匹配HTML代码中链接的正则。
原帖正则:
/<a href=".+?">.+?<\/a>/g
感觉有点严格,首先要<a href="".+?">有,而且href属性可以是一个或者多个除换行外任意字符(非贪婪)。后面是.+?<\/a>,一个或者多个除换行外任意字符(非贪婪),再加上结束标签。
有个问题,如果a的起始标签最后有空格,或者除了href还有其它属性的话,上面的正则就不能匹配这个链接了。
例如:
<a href="asdfs" >……多了个空格。
<a id="xx" href=""asdfs">……前面有属性。
……
重写正则:
/<a\s(\s*\w*?=".+?")*(\s*href=".+?")(\s*\w*?=".+?")*\s*>[\s\S]*?<\/a>/
思路如下:首先要有<a和一个空格。/<a\s/
第一个(\s*\w*?=".+?")*
可以匹配一个属性,属性前面可能有或者没有多余的空格,用\s*匹配;属性名肯定是单词字符,用\w*?匹配;=".+?"就是匹配属性值了非换行字符若干个;整个括号外面加个*表示可能有任意多个属性。
(\s*href=".+?")
匹配href,它也是一个属性,所以只要把上面子正则表达式中的\w修改为href=就行了。
(\s*\w*?=".+?")*重复第一个子正则表达式,再次接受任意个属性。
\s*>,属性最后再加上若干个空格和>。
[\s\S]*?,链接的文字,可能有任何字符组成,若干个,非贪婪。
<\/a>最后是结束标签。
补充:属性名和=之间,以及=和属性值之间也可能有空格。所以要再加上几个\s*。
最后的实例代码如下:
<script type="text/javascript">
function findLinks(str){
var reg = /<a\s(\s*\w*?\s*=\s*".+?")*(\s*href\s*=\s*".+?")(\s*\w*?\s*=\s*".+?")
*\s*>[\s\S]*?<\/a>/g;
var arr = str.match(reg);
for(var i=0;i<arr.length;i++){
//alert(arr[i]);
document.write('link:'+arr[i]+'<br />');
}
}
var str = '<p>测试链接:<a id = "test" href="http://bbs.blueidea.com" title="无敌">经典论坛
</a></p><a? href = "http://www.blueidea.com/"? >蓝色理想</a>';
var arr = findLinks(str);
</script>
会把所有的链接在页面直接显示出来。注意,
本帖遗留问题:如何执行从右到左的匹配。貌似JS或者VBS没有提供这个功能2、JS或者VBS不支持 后行断言。。用什么方法实现这个功能。
匹配链接的文字
来源:求一正则?
代码:<a href="#>这里要保存</a>,只保存链接的文本内容,标签信息删掉。
前面写过一个匹配链接的正则:
/<a\s(\s*\w*?=".+?")*(\s*href=".+?")(\s*\w*?=".+?")*\s*>[\s\S]*?<\/a>/
不过我们需要捕获的是文字内容,所以需要做一定的修改。第一步就是在所有的括号内都加上?:表示不捕获。第二步就是再多加一个括号放在[\s \S]*?两侧,这样就可以捕获到链接的文字内容了。最后正则如下:
/<a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*>([\s\S]*?)<\/a>/
测试代码如下:
<script type="text/javascript">
function anchorText(str){
var reg =/<a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*>
([\s\S]*?)<\/a>/;
str = str.replace(reg,'$1');
return str;
}
var str = '<a id = "test" href="http://bbs.blueidea.com" title="无敌">经典论坛</a>';
document.write(anchorText(str));
</script>
正则判断标签是否闭合
来源:求助 超难!正则表达式如何判断一个标签是否闭合
例如:<img xxx=”xxx” 就是没有闭合的标签;
<p>p的内容,同样也是没闭合的标签。
从简单的正则开始,先匹配起始标签
/<[a-z]+/i
再加上若干属性:
/<[a-z]+(\s*\w*?\s*=\s*".+?")*/i
下面就到关键点了,标签的闭合。标签可能有两种方式闭合,<img xxx=”xxx” />
或者是<p>xxx </p>。
(\s*\/>)
匹配img类的结束,即/>。
(\s*?>[\s\S]*?<\/\1>)
匹配\p类标签的结束标签。>是其实标签末尾,之后是标签内容若干个任意字符,最后的<\/\1>就是结束标签了。
加上一个或就可以解决了,最后的完整正则表达式:
整个正则:
/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?<\/\1>|\s*\/>)/i
拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例如
<div>aaaaaa<div>test</div>
也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在匹配结果中检查是否成对。正则如下:
/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i
下面都是我收集的一些比较常用的正则表达式,因为平常可能在表单验证的时候,用到的比较多。特发出来,让各位朋友共同使用。呵呵。
匹配中文字符的正则表达式: [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.9499.net/page1.htm”;
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,”
匹配结尾的数字
统一空格个数
判断字符串是不是由数字组成
电话号码正则
手机号码正则表达式
使用正则表达式实现删除字符串中的空格
限制文本框只能输入数字和小数点等等
替换小数点前内容为指定内容
只匹配中文的正则表达式
返回字符串的中文字符个数
正则表达式取得匹配IP地址前三段
匹配<ul>与<ul>之间的内容
用正则表达式获得文件名
绝对路径变相对路径
用户名正则
匹配英文地址
正则匹配价格
身份证号码的匹配
要求文本有指定行数
单词首字母大写
正则验证日期格式
去掉文件的后缀名
验证邮箱的正则表达式
匹配源代码中的链接
匹配链接的文字
正则判断标签是否闭合
用正则获得指定标签的内容
正则判断是否为数字与字母的混合
空格与英文同时存在
显示或者保存正则表达式匹配的部分内容
正则表达式替换变量
正则替换指定属性中的文本
将阿拉伯数字替换为中文大写形式
替换文本中的URL为链接
从HTML代码段删除指定标签极其内容
用正则给文本分段
转换源代码中的标签
给属性添加双引号
给table加上tbody
去掉标签的所有属性
正则替换特定单词
指定文字高亮显示
删除标签
错误贴
太难贴
匹配数字的“正则”
正则资源
关于测试代码
本文不是使用Dreamweaver编辑,以下测试代码可能已经在赋值粘贴的过程做了一些调整,可能执行失效。可以参看本文的pdf版本。
匹配结尾的数字
来源:如何用 javascript 正则表达式 取出字符串最后一组数字,谢谢
如
30CAC0040 取出40
3SFASDF92 取出92
正则如下:/\d+$/g
统一空格个数
来源:正则匹配空格的问题
字符串内字符键有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。
例如:蓝 色 理 想
变成:蓝 色 理 想
aobert的正则:
<script type="text/javascript">
var str="蓝 色 理 想"
var reg=/\s+/g
str = str.replace(reg," ")
document.write(str)
</script>
判断字符串是不是由数字组成
来源:有没有简单的方法判断字符串由数字组成?
这个正则比较简单,写了一个测试
<script type="text/javascript">
function isDigit(str){
var reg = /^\d*$/;
return reg.test(str);
}
var str = "7654321";
document.write(isDigit(str));
var str = "test";
document.write(isDigit(str));
</script>
电话号码正则
来源:想问一下关于电话号码的正则判断
:求一个验证电话号码的JS正则
/^\d{3,4}-\d{7,8}(-\d{3,4})?$/
区号必填为3-4位的数字,区号之后用“-”与电话号码连接
^\d{3,4}-
电话号码为7-8位的数字
\d{7,8}
分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接
(-\d{3,4})?
手机号码正则表达式
正则验证手机号,忽略前面的0,支持130-139,150-159。忽略前面0之后判断它是11位的。
cloeft的正则:
/^0*(13|15)\d{9}$/
^0*匹配掉开头任意数量的0。
由于手机号码是13任意数字9位,和15任意数字9位,所以可以用(13|15)\d{9}匹配。
测试代码如下:
function testReg(reg,str){
return reg.test(str);
}
var reg = /^0*(13|15)\d{9}$/;
var str = '13889294444';
var str2 = '12889293333';
var str3 = '23445567';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
使用正则表达式实现删除字符串中的空格:
来源:请问js中有没有去掉空格的函数
代码以及测试代码如下:
<script type="text/javascript">
//删除字符串两侧的空白字符。
function trim(str){
return str.replace(/^\s+|\s+$/g,'');
}
//删除字符串左侧的空白字符。
function ltrim(str){
return str.replace(/^\s+/g,'');
}
//删除字符串右侧的空白字符。
function rtrim(str){
return str.replace(/\s+$/g,'');
}
//以下为测试代码
var trimTest = " 123456789 ";
//前后各有一个空格。
document.write('length:'+trimTest.length+'<br />');
//使用前
document.write('ltrim length:'+ltrim(trimTest).length+'<br />');
//使用ltrim后
document.write('rtrim length:'+rtrim(trimTest).length+'<br />');
//使用rtrim后
document.write('trim length:'+trim(trimTest).length+'<br />');
//使用trim后
</script>
测试的结果如下:
length:11
ltrim length:10
rtrim length:10
trim length:9
限制文本框只能输入数字和小数点等等
来源:文本框输入限制的问题????
只能输入数字和小数点
var reg = /^\d*\.?\d{0,2}$/
开头有若干个数字,中间有0个或者一个小数点,结尾有0到2个数字。
只能输入小写的英文字母和小数点,和冒号,正反斜杠(:./\)
var reg = /[a-z\.\/\\:]+/;
a-z包括了小写的英文字母,\.是小数点,\/和\\分别是左右反斜线,最后是冒号。整个组成一个字符集和代码任一均可,最后在加上+,1或者多个。
替换小数点前内容为指定内容
来源:求一正则表达式!
请问 怎么把这个字符串的小数点前面的字符替换为我自定义的字符串啊?
例如:infomarket.php?id=197 替换为 test.php?id=197
应该可以把第一个点“.”之前的所有单词字符替换为test就可以了。我写的正则如下:
<script type="text/javascript">
var str = "infomarket.php?id=197";
var reg = /^\w*/ig;
//匹配字符串开头的任意个单词字符
str = str.replace(reg,'test');
document.write(str);
</script>
原帖的有点复杂,没太看明白。
只匹配中文的正则表达式
来源:关于上传的时候,只能选择中文名称的图片(是否可以用toASCII方法呢?)
前两天看的《JavaScript开发王》里恰好有中文的unicode范围,正则如下:
/[\u4E00-\u9FA5\uf900-\ufa2d]/
写了一个简单的测试,会把所有的中文替换成“哦”。
<script type="text/javascript">
var str = "有中文?and English.";
var reg = /[\u4E00-\u9FA5\uf900-\ufa2d]/ig;
str = str.replace(reg,'哦');
document.write(str);
</script>
返回字符串的中文字符个数
来源:有没返回中文字符字节的函数!
一般的字符长度对中文和英文都是不分别的 如JS里的length,那么如何返回字符串中中文字符的个数呢?guoshuang老师在原帖中给出了解决方案,我又没看懂……
不过我自己也想到了一个办法:先去掉非中文字符,再返回length属性。函数以及测试代码如下:
<script type="text/javascript">
function cLength(str){
var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
//匹配非中文的正则表达式
var temp = str.replace(reg,'');
return temp.length;
}
var str = "中文123";
document.write(str.length+'<br />');
document.write(cLength(str));
</script>
结果:
5
2
中文两个,数字三个,正确。
下面的测试也正确。
var str = "中文123tets@#!#%$#[][{}";
document.write(str.length+'<br />');
document.write(cLength(str));
正则表达式取得匹配IP地址前三段
来源:如何用正则取IP前3段
192.168.118.101,192.168.118.72, 192.168.118.1都替换成:192.168.118
只要匹配掉最后一段并且替换为空字符串就行了,正则如下:
/\.\d{1,3}$/
匹配结尾的.n,.nn或者.nnn。
测试代码如下:
function replaceReg(reg,str){
return str.replace(reg,'')
}
var reg = /\.\d{1,3}$/;
var str = '192.168.118.101';
var str2 = '192.168.118.72';
var str3 = '192.168.118.1';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
相似的有,这个帖子里有一个验证IP地址的方法:求检验MAC地址的正则表达例子
匹配<ul>与<ul>之间的内容
来源:请教个正则的小问题吧
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>
用正则可以得到 <ul>起到下个<ul> 之间的内容。
正则如下:
/<ul>[\s\S]+?<ul>/i
首先匹配两侧的ul标签,中间的[\s\S]+?可以匹配一个或者多个任意字符,一定要非贪婪,否则会匹配<ul>safsf<ul>safsf</ul><ul>。
用正则表达式获得文件名
来源:C:\006.jpg
c:\images\tupian\006.jpg
可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。
xlez的正则如下:
/[^\\\/]*[\\\/]+/g
首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。形如“xxx/”或者“xxx\”或者“/”或者“\”
函数以及测试代码:
<script type="text/javascript">
function getFileName(str){
var reg = /[^\\\/]*[\\\/]+/g;
//xxx\或者是xxx/
str = str.replace(reg,'');
return str;
}
var str = "c:\\images\\tupian\\006.jpg";
document.write(getFileName(str)+'<br />');
var str2 = "c:/images/tupian/test2.jpg";
document.write(getFileName(str2));
</script>
注意,\需要转义。
绝对路径变相对路径
来源:讨论一个正则
将<IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif">转换为:<IMG height="120" width="800" src="/image/somepic.gif">。
其中网址可能改变,例如http://localhost等等。
cloudchen的正则:
/http:\/\/[^\/]+/
首先是http://,然后[^\/]+找过1个或者多个非/字符,因为遇到第一个/表示已经到目录了,停止匹配。
测试代码如下:
<script type="text/javascript">
var str = '<IMG height="120" width="800" \
src="http://23.123.22.12/image/somepic.gif">';
var reg = /http:\/\/[^\/]+/;
str = str.replace(reg,"");
alert(str)
</script>
用户名正则
来源:求正则,急急呀!!
用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16个字符。
hansir和解决方案弄成正则:
/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/
中文字符或者单词字符,4到16个。实现4到16结成到正则里的关键就是开始^和结束$,这就等于整个字符串只能有这些匹配的内容,不能有多余的。
函数和测试代码如下:
<script type="text/javascript">
function isEmail(str){
var reg = /^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/;
return reg.test(str);
}
var str = '超级无敌用户名regExp';
var str2 = '捣乱的@';
var str3 = '太短'
var str4 = '太长longlonglonglonglonglonglonglong'
document.write(isEmail(str)+'<br />');
document.write(isEmail(str2)+'<br />');
document.write(isEmail(str3)+'<br />');
document.write(isEmail(str4)+'<br />');
</script>
匹配英文地址
来源:-求助- 正则问题
规则如下:
包含 "点", "字母","空格","逗号","数字",但开头和结尾不能是除字母外任何字符。
[\.a-zA-Z\s,0-9]这个字符集就实现了字母,空格,逗号和数字。最终正则如下:
/^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/
开头必须有字母,结束也必须是一个以上字母。测试代码如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/;
var str = 'No.8,ChangAn Street,BeiJing,China';
var str2 = '8.No,ChangAn Street,BeiJing,China';
var str3 = 'No.8,ChangAn Street,BeiJing,China88';
document.write(testReg(reg,str)+'<br />')
document.write(testReg(reg,str2)+'<br />')
document.write(testReg(reg,str3)+'<br />')
</script>
正则匹配价格
来源:为什么这个正则不起作用啊?急啊?
价格的格式应该如下:
开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。hansir给出的对应正则如下:
/^(\d*\.\d{0,2}|\d+).*$/
hansir给出的测试代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
function checkPrice(me){
if(!(/^(?:\d+|\d+\.\d{0,2})$/.test(me.value))){
me.value = me.value.replace(/^(\d*\.\d{0,2}|\d+).*$/,'$1');
}
}
</script>
</head>
<body>
<input type="text" onkeyup="checkPrice(this);"/>
</body>
</html>
身份证号码的匹配
来源:关于正则的,大家帮帮忙,急,在线等
身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字,正则如下:
/^(\d{14}|\d{17})(\d|[xX])$/
开头是14位或者17位数字,结尾可以是数字或者是x或者是X。
测试代码如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^(\d{14}|\d{17})(\d|[xX])$/;
var str = '123456789012345';//15位
var str2 = '123456789012345678';//18位
var str3 = '12345678901234567X';//最后一位是X
var str4 = '1234';//位数不对
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
要求文本有指定行数
来源:[求助]求一句正则表达式的写法
匹配至少两行的字符串,每行都为非空字符。
只要匹配到[\n\r]就表示有换行了,再保证换行的两段都不是空字符就可以了。正则如下:
/\S+?[\n\r]\S+?/i
这个正则的应用应该是用在textarea里,如果是如下要求:可以支持所有字符,中间可带空格,可以包括英文、数字、中文、标点
这样的话,只要针对空格再改一下就行了。(按照非空的要求,上面有不能匹配“字符+空格+换行+字符”的字符串)。修改如下:
/\S+?\s*?[\n\r]\s*?\S+?/i
单词首字母大写
来源:求个正则,处理英文单词或词组的
每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea
cloeft的正则:
/\b(\w)|\s(\w)/g
所谓“首字母”包括两种情况:第一种是边界(开头)的单词字符,一种是空格之后的新单词的第一个字母。测试代码如下:
<script type="text/javascript">
function replaceReg(reg,str){
str = str.toLowerCase();
return str.replace(reg,function(m){return m.toUpperCase()})
}
var reg = /\b(\w)|\s(\w)/g;
var str = 'blue idea';
var str2 = 'BLUE IDEA';
var str3 = 'Test \n str is no good!';
var str4 = 'final test';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
document.write(replaceReg(reg,str4)+'<br />');
</script>
正则验证日期格式
来源:yyyy-mm-dd的正则怎样写啊?
yyyy-mm-dd格式
正则如下:
/^\d{4}-\d{1,2}-\d{1,2}$/
4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。
测试代码如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/;
var str = '2008-8-8';
var str2 = '2008-08-08';
var str3 = '08-08-2008';
var str4 = '2008 08 08';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
第二种格式:来源:求一正则表达式
yyyy-mm-dd
或
yyyy/mm/dd
用“或”简单地修改一下就行了。
/^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}$/
去掉文件的后缀名
来源:求一个正则
www.abc.com/dc/fda.asp变为www.abc.com/dc/fda
如果文件后缀已知的话这个问题就非常简单了,正则如下:
/\.asp$/
匹配最后的.asp而已,测试代码如下:
<script type="text/javascript">
function delAspExtension(str){
var reg = /\.asp$/;
return str.replace(reg,'');
}
var str = 'www.abc.com/dc/fda.asp';
document.write(delAspExtension(str)+'<br />');
</script>
如果文件名未知的话就用这个正则:/\.\w+$/,测试代码如下:
<script type="text/javascript">
function delExtension(str){
var reg = /\.\w+$/;
return str.replace(reg,'');
}
var str = 'example.com/dc/fda.asp';
document.write(delExtension(str)+'<br />');
var str2 = 'test/regular/fda.do';
document.write(delExtension(str2)+'<br />');
var str3 = 'example.com/dc/fda.strange_extension';
document.write(delExtension(str3)+'<br />');
</script>
验证邮箱的正则表达式
来源:找javascript写的表单检查代码!
fuchangxi的正则:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/
开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者多个组合。
<script type="text/javascript">
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
return reg.test(str);
}
var str = 'test@hotmail.com';
document.write(isEmail(str)+'<br />');
var str2 = 'test@sima.vip.com';
document.write(isEmail(str2)+'<br />');
var str3 = 'te-st@qq.com.cn';
document.write(isEmail(str3)+'<br />');
var str4 = 'te_st@sima.vip.com';
document.write(isEmail(str4)+'<br />');
var str5 = 'te.._st@sima.vip.com';
document.write(isEmail(str5)+'<br />');
</script>
我不太了解邮箱的具体规则。感觉这个正则比较简单,EMAIL校验 正则 讨论 求解里有比较详细的邮箱正则讨论。
匹配源代码中的链接
来源:正则
能够匹配HTML代码中链接的正则。
原帖正则:
/<a href=".+?">.+?<\/a>/g
感觉有点严格,首先要<a href="".+?">有,而且href属性可以是一个或者多个除换行外任意字符(非贪婪)。后面是.+?<\/a>,一个或者多个除换行外任意字符(非贪婪),再加上结束标签。
有个问题,如果a的起始标签最后有空格,或者除了href还有其它属性的话,上面的正则就不能匹配这个链接了。
例如:
<a href="asdfs" >……多了个空格。
<a id="xx" href=""asdfs">……前面有属性。
……
重写正则:
/<a\s(\s*\w*?=".+?")*(\s*href=".+?")(\s*\w*?=".+?")*\s*>[\s\S]*?<\/a>/
思路如下:首先要有<a和一个空格。/<a\s/
第一个(\s*\w*?=".+?")*
可以匹配一个属性,属性前面可能有或者没有多余的空格,用\s*匹配;属性名肯定是单词字符,用\w*?匹配;=".+?"就是匹配属性值了非换行字符若干个;整个括号外面加个*表示可能有任意多个属性。
(\s*href=".+?")
匹配href,它也是一个属性,所以只要把上面子正则表达式中的\w修改为href=就行了。
(\s*\w*?=".+?")*重复第一个子正则表达式,再次接受任意个属性。
\s*>,属性最后再加上若干个空格和>。
[\s\S]*?,链接的文字,可能有任何字符组成,若干个,非贪婪。
<\/a>最后是结束标签。
补充:属性名和=之间,以及=和属性值之间也可能有空格。所以要再加上几个\s*。
最后的实例代码如下:
<script type="text/javascript">
function findLinks(str){
var reg = /<a\s(\s*\w*?\s*=\s*".+?")*(\s*href\s*=\s*".+?")(\s*\w*?\s*=\s*".+?")
*\s*>[\s\S]*?<\/a>/g;
var arr = str.match(reg);
for(var i=0;i<arr.length;i++){
//alert(arr[i]);
document.write('link:'+arr[i]+'<br />');
}
}
var str = '<p>测试链接:<a id = "test" href="http://bbs.blueidea.com" title="无敌">经典论坛
</a></p><a? href = "http://www.blueidea.com/"? >蓝色理想</a>';
var arr = findLinks(str);
</script>
会把所有的链接在页面直接显示出来。注意,
本帖遗留问题:如何执行从右到左的匹配。貌似JS或者VBS没有提供这个功能2、JS或者VBS不支持 后行断言。。用什么方法实现这个功能。
匹配链接的文字
来源:求一正则?
代码:<a href="#>这里要保存</a>,只保存链接的文本内容,标签信息删掉。
前面写过一个匹配链接的正则:
/<a\s(\s*\w*?=".+?")*(\s*href=".+?")(\s*\w*?=".+?")*\s*>[\s\S]*?<\/a>/
不过我们需要捕获的是文字内容,所以需要做一定的修改。第一步就是在所有的括号内都加上?:表示不捕获。第二步就是再多加一个括号放在[\s \S]*?两侧,这样就可以捕获到链接的文字内容了。最后正则如下:
/<a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*>([\s\S]*?)<\/a>/
测试代码如下:
<script type="text/javascript">
function anchorText(str){
var reg =/<a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*>
([\s\S]*?)<\/a>/;
str = str.replace(reg,'$1');
return str;
}
var str = '<a id = "test" href="http://bbs.blueidea.com" title="无敌">经典论坛</a>';
document.write(anchorText(str));
</script>
正则判断标签是否闭合
来源:求助 超难!正则表达式如何判断一个标签是否闭合
例如:<img xxx=”xxx” 就是没有闭合的标签;
<p>p的内容,同样也是没闭合的标签。
从简单的正则开始,先匹配起始标签
/<[a-z]+/i
再加上若干属性:
/<[a-z]+(\s*\w*?\s*=\s*".+?")*/i
下面就到关键点了,标签的闭合。标签可能有两种方式闭合,<img xxx=”xxx” />
或者是<p>xxx </p>。
(\s*\/>)
匹配img类的结束,即/>。
(\s*?>[\s\S]*?<\/\1>)
匹配\p类标签的结束标签。>是其实标签末尾,之后是标签内容若干个任意字符,最后的<\/\1>就是结束标签了。
加上一个或就可以解决了,最后的完整正则表达式:
整个正则:
/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?<\/\1>|\s*\/>)/i
拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例如
<div>aaaaaa<div>test</div>
也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在匹配结果中检查是否成对。正则如下:
/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i
下面都是我收集的一些比较常用的正则表达式,因为平常可能在表单验证的时候,用到的比较多。特发出来,让各位朋友共同使用。呵呵。
匹配中文字符的正则表达式: [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.9499.net/page1.htm”;
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,”
发表评论
-
js select year month
2014-11-03 21:56 634<div class="iteye-blog- ... -
去空格
2011-04-20 17:16 1321/** * 删除左右两端的空格 * @par ... -
js 屏幕 宽度 高度 信息 获得
2011-04-12 15:00 1088转载:http://gflei.iteye.com/blog/ ... -
javascript 操作 json 转载
2010-08-03 21:50 1514如何在 Web 页面中用 JavaScript 处理 JSON ... -
js 读写文件 转载
2010-07-23 10:20 617<script language = "jav ... -
javascrip 动态添加行
2010-07-22 09:58 1001<html> <head> ... -
javascrip date
2010-07-09 11:31 841/** * 获取指定时间年的最后一天 * @par ... -
JavaScript动态的为元素添加事件
2010-06-29 09:48 1022而在js脚本中也可以动态为这个元素添加事件: attachEv ... -
视频点播系统
2010-06-18 10:47 1875视频点播系统 本系统使 ... -
RM 播放器代码 转载
2010-06-13 10:36 1094real放器代码 <object classid=&q ... -
js文件
2009-07-20 22:36 786/****************************** ... -
在html文件引入其它html文件的几种方法
2009-04-20 21:33 975在html文件引入其它html文件的几种方法 简介:在论坛中常 ...
相关推荐
下面详细解析了文档中提到的JavaScript正则表达式实战应用的各个方面。 首先,匹配结尾的数字是正则表达式的一个常用功能。在JavaScript中,可以使用正则表达式/\d+$/g来实现。这个表达式可以找到字符串中最后一个...
JavaScript正则表达式是编程语言JavaScript中的一个重要组成部分,它用于处理文本字符串,进行模式匹配、查找、替换等操作。在JavaScript中,正则表达式是一种强大的工具,可以帮助开发者实现复杂的数据验证、文本...
### 经典JavaScript正则表达式实战知识点解析 #### 一、匹配结尾的数字 在JavaScript中,我们经常需要从字符串中提取特定的信息。一种常见的需求是从字符串末尾获取数字。例如,在字符串`30CAC0040`中提取`40`,或...
本资源“源码(精通正则表达式&实战正则表达式)”专注于JavaScript环境下的正则表达式学习,通过一系列视频教程和配套源码,帮助开发者提升对正则表达式的理解和应用能力。 首先,"精通正则表达式五部视频"可能涵盖...
《JS_正则表达式实战:JavaScript语言精髓与编程实践》是一本深入探讨JavaScript中正则表达式应用的书籍,旨在帮助开发者掌握这一强大的文本处理工具,并将其运用到实际编程中。书中涵盖了从基础概念到高级技巧的全...
在编程语言中,几乎所有现代语言都支持正则表达式的使用,例如 Java、Python、JavaScript 等。此外,在日常工作中使用的工具如 grep、sed 和 awk 等也支持正则表达式的操作。 #### 三、基本概念介绍 1. **元字符**...
本资源包含两类书籍——"JavaScript正则表达式.pdf"和"经典JavaScript正则表达式实战.pdf",主要针对JavaScript环境下的正则表达式使用进行深入探讨。 首先,我们来了解一下正则表达式的基础概念。正则表达式由特殊...
### 正则表达式在JavaScript中的应用全攻略 #### 一、正则表达式的概念及其在JavaScript中的重要性 正则表达式(Regular Expression)是一种强大的文本处理工具,能够帮助开发者进行复杂的字符串搜索和替换。在...
正则表达式作为一种强大的文本处理工具,在多种编程语言中都有着广泛的应用,包括Java、JavaScript等。接下来,我们将深入探讨与该书相关的几个关键知识点。 ### 正则表达式基础 正则表达式是一种用于匹配字符串中...
本视频教程将全面覆盖正则表达式的基础与高级用法,并结合JavaScript和Java这两种常见编程语言进行实战演示。 在正则表达式的简单语法部分,你将学习到: 1. 基本字符匹配:如点号(.)匹配任意单个字符,星号(*...
- **编程语言支持**:大多数编程语言(如JavaScript、Python、Java)都有内置的正则表达式支持,了解各自的特点和差异有助于提高效率。 通过学习和使用“正则表达式测试器及教程”,你可以熟练掌握正则表达式,...
书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,本书给出了涉及基于C#、Java、...
"传智播客_张孝祥_JavaScript7_正则表达式"这个课程可能详细讲解了JavaScript中的正则表达式及其应用。 1. 正则表达式基础: - 定义:正则表达式是一种模式匹配工具,用于描述一种特定的字符串模式。 - 基本元素...
5. **正则表达式引擎的差异**:书中讨论了不同的正则表达式引擎(如Perl、JavaScript、Java、.NET等)之间的差异,这对于跨平台开发或使用不同语言的开发者来说非常重要。 6. **实战应用**:书中包含大量实例,涵盖...
10. 实战应用:结合实例展示正则表达式在Web开发、文本处理、数据验证等方面的应用。 通过阅读《精通正则表达式》这本书,你可以深入了解正则表达式的原理,学会如何构造复杂的模式匹配,并掌握在实际项目中高效...
10. **实践案例**:通过具体的实战例子,比如邮箱验证、URL解析、日期格式识别等,加深对正则表达式的理解。 总之,"正则表达式.chm"文档将是一个全面的学习资源,无论你是初学者还是希望进一步提升正则表达式技能...