正则表达式学习

一、创建正则表达式

使用字面量:

var regex = /pattern/;

使用 RegExp 对象:

var regex = new RegExp("pattern", switchs);

而正则表达式的一般形式描述为:

var regex = /pattern/[switchs];

这里的开关(switchs)有以下三种:

修饰符

描述

i

忽略大小写开关

g

全局搜索开关

m

多行搜索开关(重定义^与$的意义)

比如,/java/i 就可以匹配 java/Java/JAVA,而 /java/ 则不可。而 g 开关用来匹配整个串中所有出现的子模式,如 /java/g 匹配”javascript&java”中的两个”java”。而 m 开关定义是否多行搜索,比如:

var pattern = /^javascript/;  

print(pattern.test("java\njavascript"));//false  

pattern = /^javascript/m;  

print(pattern.test("java\njavascript"));//true

二、正则表达式的括号的作用

正则表达式的括号的作用

一、第一种情况

括号用来将子表达式标记起来,以区别于其他表达式,比如很多的命令行程序都提供帮助命令,键入 h 和键入 help 的意义是一样的,那么就会有这样的表达式:

h(elp)?//字符h之后的elp可有可无

这里的括号仅仅为了将elp自表达式与整个表达是隔离(因为h是必选的)。

二、第二种情况

括号用来分组,当正则表达式执行完成之后,与之匹配的文本将会按照规则填入各个分组,比如,某个数据库的主键是这样的格式:四个字符表示省份,然后是四个数字表示区号,然后是两位字符表示区县,如 yunn0871cg 表示云南省昆明市呈贡县(当然,看起来的确很怪,只是举个例子),我们关心的是区号和区县的两位字符代码,怎么分离出来呢?

var pattern = /\w{4}(\d{4})(\w{2})/;  

var result = pattern.exec("yunn0871cg");  

print("city code = "+result[1]+", county code = "+result[2]);

正则表达式的 exec 方法会返回一个数组(如果匹配成功的话),数组的第一个元素(下标为 0)表示整个串,第一个元素为第一个分组,第二个元素为第二个分组,以此类推。因此上例的执行结果即为:

city code = 0871, county code = cg

三、第三种情况

括号用来对引用起辅助作用,即在同一个表达式中,后边的式子可以引用前边匹配的文本,我们来看一个非常常见的例子:我们在设计一个新的语言,这个语言中有字符串类型的数据,与其他的程序设计语言并无二致,比如:

var str = "hello, world";  

var str = 'fair enough';  

均为合法字符,我们可能会设计出这样的表达式来匹配该声明:

var pattern = /['"][^'"]*['"]/;

看来没有什么问题,但是如果用户输入:

var str = 'hello, world";  

var str = "hello, world';

我们的正则表达式还是可以匹配,注意这两个字符串两侧的引号不匹配!我们需要的是,前边是单引号,则后边同样是单引号,反之亦然。因此,我们需要知道前边匹配的到底是“单”还是“双”。这里就需要用到引用,JavaScript 中的引用使用斜杠加数字来表示,如\1表示第一个分组(括号中的规则匹配的文本),\2表示第二个分组,以此类推。因此我们就设计出了这样的表达式:

var pattern = /(['"])[^'"]*\1/;

在我们新设计的这个语言中,为了某种原因,在单引号中我们不允许出现双引号,同样,在双引号中也不允许出现单引号,我们可以稍作修改即可完成:

var pattern = /(['"])[^\1]*\1/;

三、用JS的正则表达式如何判断输入框内为中文或者是英文数字,或者是三者混编

1.只能输入数字和英文的:

<input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">

2.只能输入数字的:

<input onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">

3.只能输入全角的:

<input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))">

4..只能输入汉字的:

<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))">

也可以这样:

<input type=text name= caolig value ="" onblur="if (!(/^[\d]+\.?\d*$/.test(this.value)) ){alert('您的输入有误'); this.value='';this.focus();}">  

5>.
文本框里只能输入特定的字付的和文本框里不能右键弹

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
 
 
<body>
只能输入数字
<br>
<input name="text" type="text" id="NewPage"
onKeyUp="this.value=this.value.replace(/\D/g,'')"
onafterpaste="this.value=this.value.replace(/\D/g,'')" >
<br>
只能输入英文和数字
<br>
<input name="text1" maxlength="13" onKeyUp="value=value.replace(/[^a-zA-Z0-9]/g,'')" onMouseOver="value=value.replace(/[^a-zA-Z0-9]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^a-zA-Z0-9]/g,''))">
<br>
只能输入中文
<br>
<input type="text" onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')">
<br>
<br>
实验成功
<br>只能输入数字<br>
<input type=text onkeyup="this.value=this.value.replace(/\D/g,'')">
 
 
<br>只能输入数字<br>
<input type="text" onkeyup="value=value.replace(/\D/g,'')">
 
 
<br>只能输入大小写英文<br>
<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z]/g,'')">
 
 
<br>只能输入大小定英文和数字<br>
<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z0-9]/g,'')">
 
 
<br>只能输入中文<br>
<input type="text" onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')">
 
 
<br>只能输入大小定中文、英文和数字和@符号和.符号<br>
<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\@\.]/g,'')">
 
 
<br>只允许输入大小写英文,且不能粘贴也无法弹出粘贴菜单<br />
<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z]/g,'')" onkeydown="fncKeyStop(event)" onpaste="return false" oncontextmenu = "return false"/>
 
 
<br><br>
只能输入数字和点号(注意:在[^\d\.]里的d不能写成大写D,要不然会得不到想要的效果)
<input name="price" type="text" size="8" maxlength="8" onkeyup="value=value.replace(/[^\d\.]/g,'')" >
 
 
总而言之:先在<input>里输入onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\x]/g,'')里的X换成你想输入的代码就可以了,中文u4E00-u9FA5数字d英文a-z\A-Z其它符号@,点或其它符号.也可 以多个,用\隔开就行了.例如中英文和数字加@符号加点符号\a-\z\A-\Z0-9\u4E00-\u9FA5\@\.
若想在文本框里不能右键弹出菜单和不能粘贴进复制的信息的话
就要在<input>里输入 onKeyDown="fncKeyStop(event)" onpaste="return false" oncontextmenu="return false;"
</body>
</html>

四、JavaScript正则表达式

<script type="text/javascript">
		function doCheck() {	
			var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
			var v = document.getElementById("txt").value;
			if (!reg.test(v)) {
				alert("请输入正确的邮箱地址")
				return false;
			}
		}
</script>

证数字字符的正则表达式

验证数字:/^[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]*$/
验证非负整数(正整数 + 0)/ ^\d+$/
验证非正整数(负整数 + 0) /^((-\d+)|(0+))$/
验证长度为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地址:/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/
验证InternetURL:/^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$/
验证电话号码:/^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/
验证身份证号(15位或18位数字):/^\d{15}|\d{}18$/
验证一年的12个月:/^(0?[1-9]|1[0-2])$/ 
验证一个月的31天:/^((0?[1-9])|((1|2)[0-9])|30|31)$ /
整数:/^-?\d+$/
非负浮点数(正浮点数 + 0):/^\d+(\.\d+)?$/
正浮点数: /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/
非正浮点数(负浮点数 + 0):/ ^((-\d+(\.\d+)?)|(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+)?$/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值