Java正则表达式的总结

Java正则表达式的总结

 

Java正则表达式,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容.

判断用户的输入是否符合实际需求。


本文将对java正则表达式做总结。

大部分人会觉得java正则表达式是很复杂的,本文由简入深的介绍java正则表达式。

如果你是想简单的了解,看前面的内容就可以了。

如果想深入理解一下,可以多看一点。

 

一.简单的正则表达式


(一)几个简单示例展示:

 

 

package com.xykj.matcher;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
	
	/**
	 * 正则表达式其实也是一串字符串
	 * 先说几个简单的符号意义
	 * 1.[]的使用,里面可以放多个字符,代表任选其中一个
	 * 2.\\d代表任意数字
	 * 3.{N}代表前面的东西可以出现N次
	 * */

	public static void main(String[] args) {
		
		//示例一:    判断输入的号码是不是身份证号码
		//身份证16或18位 ,第一位不能是零,最后一位可以是Xx
		//String的matches方法能支持正则表达式
		
		String num="11234567891234561x";//定义身份证号码
		String regex1="[1-9][\\d]{14}[\\dXx]";//判断十六位的正则表达式
		String regex2="[1-9][\\d]{14}[\\dXx]";//判断十八位的正则表达式
		//判断输入的字符串是否是符合要求,matches的使用
		 if (num.matches(regex1)||num.matches(regex2)) {
			System.out.println("身份证号码匹配成功");
		}else {
			System.out.println("不是身份证号码");
		}
		 
		 
		 //示例二:    去掉一个算式的加减乘除符号
		 //方法split(分割字符串)也支持正则表达式
		 String num2="12+3-8/5*7";       //算式
		 String regex3="[\\+\\*\\/-]";   //加减乘除的正则表达式,\\代表转义符,后面解释
		 String[]  arr=num2.split(regex3); //使用正则表达式分割字符串
		 System.out.println(Arrays.toString(arr));  //打印数组的结果
		 
		 //其实前面一题最简单的做法是:使用replaceAll
		 //把字符串中符合正则表达式的字符串用replaceAll方法的第二个参数代替
		 String a=num2.replaceAll(regex3, "  ");
		 System.out.println(a);
		 
		 }

	}	 


 

上面的程序,涉及到了简答的正则表达式,其实就是String类里面的几个方法的使用。

 




(二)一个复杂一点的例子

 里面的知识,在下面会有介绍

 

 

package com.xykj.matcher;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test2 {
	/**
	 * 获得一长串字符串中的某些字符
	 * 
	 * */
	public static void main(String[] args) {
		 //比如从一长串字符串中获取电话号码
		String str="我想购买一本《java疯狂讲义》,请尽快联系我13500006666"
				+ "如果想交朋友,联系我13611125565"
				+ "出售二手联想电脑,型号:5560,需要的人可以联系我15012354687";
		//创建一个Pattern对象,并用在它建立一个Matcher对象
		//假设手机号格式都是13X和15X,只有11位,实际设计中可以自己修改
		String regex="((13)|(15))\\d{9}";
		Matcher matcher=Pattern.compile(regex).matcher(str);//匹配元素
		while (matcher.find()) {
			System.out.println(matcher.group());//打印符合条件的字符串
		}
	}

}



结果会把:这三个号码都打印出来


运行结果:

13500006666
13611125565
15012354687


 

 

二.正则表达式的相关类和方法

 

  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。

它包括两个类:    Pattern(模式)和Matcher(状态).

 

(一)Pattern

Pattern是一个正则表达式经编译后的表现模式。

在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.

模式可以象匹配某个特定的String那样简单,也可以很复 杂,需要采用分组和字符类,如空白,数字,字母或控制符.

因为Java字符串基于统一字符编码(Unicode),正则表达式也适用于国际化的应用程序. 



Pattern类的方法简述 

方法

说明

static Pettern compile(String regex,int flag)

编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE 表示不区分大小写)

Matcher match(CharSequence input)

获取匹配器,input时输入的待处理的字符串

static boolean matches(String regex, CharSequence input)

快速的匹配调用,直接根据输入的模式regex匹配input

String[] split(CharSequence input,int limit)

分隔字符串input,limit参数可以限制分隔的次数





 

(二)Matcher


  Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。

首先一个Pattern实例订制了一个所用语法与 PERL的类似的正则表达式经编译后的模式,

然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。



Matcher类的方法简述

方法

说明

boolean matches()

对整个输入字符串进行模式匹配.

boolean lookingAt()

从输入字符串的开始处进行模式匹配

boolean find(int start)

从start处开始匹配模式

int groupCount()

返回匹配后的分组数目

String replaceAll(String replacement)

用给定的replacement全部替代匹配的部分

String repalceFirst(String replacement)

用给定的replacement替代第一次匹配的部分 

Matcher appendReplacement(StringBuffer sb,String replacement)

根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后

StringBuffer appendTail(StringBuffer sb)

将输入序列中匹配之后的末尾字串添加到sb当前位置之后.

 

 

 

 

三.正则表达式中常见通配符 

对于单字符串比较而言,使用正则表达式没有什么优势.

Regex的真正强大之处在于体现在包括字符类和量词(*,+,?)的更复杂的模式上.


(一)字符类代表的意义: 

 


\d 数字 
\D 非数字 
\w 单字字符(0-9,A-Z,a-z)
\W 非单字字符 
\s 空白(空格符,换行符,回车符,制表符)
\S 非空白 
[] 由方括号内的一个字符列表创建的自定义字符类 
. 匹配任何单个字符 
下面的字符将用于控制将一个子模式应用到匹配次数的过程.
? 重复前面的子模式0次到一次 
* 重复前面的子模式0次或多次 
+ 重复前面的子模式一次到多次 




(二)实例部分:


1.实例一: 对整个字符串的检验


要求:判断模式与要匹配的文本是不是等价的.

分析:静态的Pattern.matches方法用于比较一个String是否匹配一个给定模式.

代码如下:


String data="java";

String regex=”java”;
boolean result=Pattern.matches(regex,data);



2.实例二: +?*的用法


要求:判断一串字符串数组里面符合条件的字符串

代码如下:


String[] dataArr = { "moon", "mon", "moon", "mono" }; //要判断的数组
for (String str : dataArr) { //遍历每一个字符串
String patternStr="m(o+)n"; //正则表达式
boolean result = Pattern.matches(patternStr, str); //判断是否匹配
if (result) {
System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");
}
else{
System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");
}
}


模式是”m(o+)n”,它表示mn中间的o可以重复一次或多次,因此moon,mon,mooon能匹配成功,

而mono在n后多了一个o,和模式匹配不上.

: +表示一次或多次;?表示0次或一次;*表示0次或多次.

 




3.实例三: [ ]的用法


要求:判断一串字符串数组里面符合条件的字符串

代码如下:


String[] dataArr = { "ban", "ben", "bin", "bon" ,"bun","byn","baen"};
for (String str : dataArr) {
String patternStr="b[aeiou]n";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");
}
else{
System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");
}
}


:方括号中只允许的单个字符,模式“b[aeiou]n”指定,只有以b开头,n结尾,中间是a,e,i,o,u中任意一个的才能匹配上,所以数组的前五个可以匹配,后两个元素无法匹配.
方括号[]表示只有其中指定的字符才能匹配.





4.实例四: |的用法


要求:判断一串字符串数组里面符合条件的字符串

代码如下:


String[] dataArr = { "been", "bean", "boon", "buin" ,"bynn"};
for (String str : dataArr) {
String patternStr="b(ee|ea|oo)n";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");
}
else{
System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");
  }
}


如果需要匹配多个字符,那么[]就不能用上了,这里我们可以用()加上|来代替,()表示一组,|表示或的关系,

模式b(ee|ea|oo)n就能匹配been,bean,boon等. 

因此前三个能匹配上,而后两个不能.






5.实例五: \d的使用


要求:判断一串字符串数组里面符合条件的字符串

代码如下:


String[] dataArr = { "1", "10", "101", "1010" ,"100+"};
for (String str : dataArr) {
String patternStr="\d+";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");
}
else{
System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");
}
}


注:从前面可以知道,\d表示的是数字,而+表示一次或多次,所以模式\d+就表示一位或多位数字.
因此前四个能匹配上,最后一个因为+号是非数字字符而匹配不上.





实例六: \w  \d   +  的使用


要求:判断一串字符串数组里面符合条件的字符串

代码如下:


String[] dataArr = { "a100", "b20", "c30", "df10000" ,"gh0t"};
for (String str : dataArr) {
String patternStr="\w+\d+";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");
}
else{
System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");
  }
}


模式\w+\d+表示的是以多个单字字符开头,多个数字结尾的字符串,因此前四个能匹配上,

最后一个因为数字后还含有单字字符而不能匹配.

 

 




7.实例七: \s的使用


要求:字符串的分割

代码如下:


String str="薪水,职位 姓名;年龄 性别";
String[] dataArr =str.split("[,\s;]"); //代表可以用,或空格或;分割字符串
for (String strTmp : dataArr) {
System.out.println(strTmp);
}


String类的split函数支持正则表达式,上例中模式能匹配”,”,单个空格,”;”中的一个,

split函数能把它们中任意一个当作分隔符,将一个字符串劈分成字符串数组.

 

 



8.实例八: []的使用


要求:字符串的分割

代码如下:


String str="20071211";
Pattern p = Pattern.compile("[年月日]");
String[] dataArr =p.split(str);
for (String strTmp : dataArr) {
System.out.println(strTmp);
}


Pattern是一个正则表达式经编译后的表现模式 ,它的split方法能有效劈分字符串.
注意其和String.split()使用上的不同.

 





9.实例九: ()的使用,这里不能使用[ ]


要求:字符串的分割

代码如下:


String str="10 1000人民币 10000 100000RMB";
str=str.replaceAll("(|人民币|RMB)", "");
System.out.println(str);


上例中,模式“(元|人民币|RMB)”匹配元,人民币,RMB中的任意一个,替换部分表示第一个组匹配的部分不变,

其余组替换成¥.
替换后的str为¥10 ¥1000 ¥10000 ¥100000






10.实例十: Parttern类的compile方法的使用


Matcher类的find方法的使用

要求:替换匹配后的字符串

代码如下:


Pattern p = Pattern.compile("m(o+)n",Pattern.CASE_INSENSITIVE); //不区分大小写
// Pattern类的matcher()方法生成一个Matcher对象 
Matcher m = p.matcher("moon mooon Mon mooooon Mooon");
StringBuffer sb = new StringBuffer();
// 使用find()方法查找第一个匹配的对象 
boolean result = m.find();
// 使用循环找出模式匹配的内容替换之,再将内容加到sb 
while (result) {
m.appendReplacement(sb, "moon"); //把找到的内容替换成moon
result = m.find();
}
// 最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里; 
m.appendTail(sb);
System.out.println("替换后内容是" + sb.toString());


上面要匹配的5个字符串都符合正则表达式。

运行结果出现:5moon字符

 

 


11.实例十一: {}的使用

除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,

还可以用{}来指定精确指定出现的次数,X{2,5}表示X最少出现2次,最多出现5次;

X{2,}表示X最少出现2次,多则不限;X{5}表示X只精确的出现5次.

要求:匹配字符串

代码如下:


String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"};
for (String str : dataArr) {
String patternStr = "g(o{2,5})gle";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");
  }
}





12.实例十二: [ ]的使用

表示从..到…,如[a-e]等同于[abcde]

要求:字符串的匹配

代码如下:


String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"};
for (String str : dataArr) {
String regex = "T[a-c]n";
boolean result = Pattern.matches(regex, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + regex + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + regex + "失败");
}
}






13.实例十三:不区分大小写匹配. 


正则表达式默认都是区分大小写的,使用了Pattern.CASE_INSENSITIVE则不对大小写进行区分.

要求:字符串的匹配

代码如下:


String patternStr="ab";
Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
String[] dataArr = { "ab", "Ab", "AB"};
for (String str : dataArr) {
Matcher matcher=pattern.matcher(str);
if(matcher.find()){
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
  }
}


 




14.实例十四:\s*代表0到到多个空格


要求:使用正则表达式劈分字符串.

代码如下:


注意这里要把复杂的模式写在前面,否则简单模式会先匹配上.
String input="职务=GM 薪水=50000 , 姓名=职业经理人 ; 性别= 年龄=45 ";
String patternStr="(\s*,\s*)|(\s*;\s*)|(\s+)";
Pattern pattern=Pattern.compile(patternStr);
String[] dataArr=pattern.split(input);
for (String str : dataArr) {
System.out.println(str);
}


 

15.实例十五:Matcher的group方法的使用 


要求:取出尖括号外面的内容

代码如下:


String regex="<(\w+)>(\w+)</";
Pattern pattern=Pattern.compile(regex);
String input="<name>Bill</name><salary>50000</salary><title>GM</title>";
Matcher matcher=pattern.matcher(input);
while(matcher.find()){
System.out.println(matcher.group(2));
}

这题还是有点复杂的!

输出结果为: Bill    50000   GM
group(2)代表的是第二部分的\W+

如果group(1)代表的是第一部分的\W+

如果group(0)代表的是整个匹配的字符串

 

 


 

 

实例十六: []和+的使用


要求:将单词数字混合的字符串的单词部分大写.

代码如下:


String regex="([a-zA-Z]+[0-9]+)";
Pattern pattern=Pattern.compile(regex);
String input="age45 salary500000 50000 title";
Matcher matcher=pattern.matcher(input);
StringBuffer sb=new StringBuffer();
while(matcher.find()){
String replacement=matcher.group(1).toUpperCase();
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
System.out.println("替换完的字串为"+sb.toString());

 

输出结果:AGE45 SALARY500000 50000 title

 



五.一个检验Email地址的小程序:
最后我们来看一个检验Email地址的例程,该程序是用来检验一个输入的EMAIL地址里所包含的字符是否合法,

虽然这不是一个完整的EMAIL地址检验程序,它不能检验所有可能出现的情况,

但在必要时您可以在其基础上增加所需功能。

 

import java.util.regex.*;

public class Email {

   public static void main(String[] args) throws Exception {

      Scanner scanner=new Scanner(System.in);

      String input = scanner.next();

      //检测输入的EMAIL地址是否以 非法符号".""@"作为起始字符      

      Pattern p = Pattern.compile("^//.|^//@");

      Matcher m = p.matcher(input);

      if (m.find()){

        System.err.println("EMAIL地址不能以'.''@'作为起始字符");

      }

      //检测是否以"www."为起始

      p = Pattern.compile("^www//.");

      m = p.matcher(input);

      if (m.find()) {

        System.out.println("EMAIL地址不能以'www.'起始");

      }

      //检测是否包含非法字符

      p = Pattern.compile("[^A-Za-z0-9//.//@_//-~#]+");

      m = p.matcher(input);

      StringBuffer sb = new StringBuffer();

      boolean result = m.find();

      boolean deletedIllegalChars = false;

      while(result) {

         //如果找到了非法字符那么就设下标记

         deletedIllegalChars = true;

         //如果里面包含非法字符如冒号双引号等,那么就把他们消去,加到SB里面

         m.appendReplacement(sb, "");

         result = m.find();

      }

      m.appendTail(sb);

      input = sb.toString();

      if (deletedIllegalChars) {

          System.out.println("输入的EMAIL地址里包含有冒号、逗号等非法字符,请修改");

          System.out.println("您现在的输入为: "+args[0]);

          System.out.println("修改后合法的地址应类似: "+input);

     }

   }

}

 

 

例如,我们在命令行输入:java Email www.kevin@163.net

那么输出结果将会是:EMAIL地址不能以'www.'起始

如果输入的EMAIL@kevin@163.net

则输出为:EMAIL地址不能以'.''@'作为起始字符

当输入为:cgjmail#$%@163.net

那么输出就是:

输入的EMAIL地址里包含有冒号、逗号等非法字符,请修改
您现在的输入为: cgjmail#$%@163.net
修改后合法的地址应类似: cgjmail@163.net



例子是没有办法一一列出来了,但是java正则表达式的大部分用法都已经有覆盖到了。


 

[正则表达式]文本框输入内容控制 ….. 默认分类 2009-02-13 10:10 阅读26 评论0 字号: 大大 中中 小小整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[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}$"正确格式为:"XXX-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] 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;} 匹配空行的正则表达式:\n[\s| ]*\r 匹配html标签的正则表达式:<(.*)>(.*)<\/(.*)>|<(.*)\/> 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下: String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, "");} 利用正则表达式分解和转换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)) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中文: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,''))" 用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5\w]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5\w]/g,''))" value="允许下划线,数字字母和汉字"> <script language="javascript">if (document.layers)//触发键盘事件document.captureEvents(Event.KEYPRESS) function xz(thsv,nob){if(nob=="2"){window.clipboardData.setData("text","")alert("避免非法字符输入,请勿复制字符");return false;}if (event.keyCode!=8 && event.keyCode!=16 && event.keyCode!=37 && event.keyCode!=38 && event.keyCode!=39 && event.keyCode!=40){thsvv=thsv.value;//输入的值thsvs=thsvv.substring(thsvv.length-1);//输入的最后一个字符//thsvss=thsvv.substring(0,thsvv.length-1);//去掉最后一个错误字符if (!thsvs.replace(/[^\u4E00-\u9FA5\w]/g,'') || event.keyCode==189){//正则除去符号和下划线 keythsv.value='请勿输入非法符号 ['+thsvs+']';alert('请勿输入非法符号 ['+thsvs+']');thsv.value="";return false;}}} </script> <input onkeyup="xz(this,1)" onPaste="xz(this,2)" value="">允许数字字母和汉字 <script language="javascript"><!--function MaxLength(field,maxlimit){var j = field.value.replace(/[^\x00-\xff]/g,"**").length;//alert(j);var tempString=field.value;var tt="";if(j > maxlimit){for(var i=0;i<maxlimit;i++){if(tt.replace(/[^\x00-\xff]/g,"**").length < maxlimit)tt = tempString.substr(0,i+1);elsebreak;}if(tt.replace(/[^\x00-\xff]/g,"**").length > maxlimit)tt=tt.substr(0,tt.length-1);field.value = tt;}else{;}}</script> 单行文本框控制<br /><INPUT type="text" id="Text1" name="Text1" onpropertychange="MaxLength(this, 5)"><br />多行文本框控制:<br /><TEXTAREA rows="14"cols="39" id="Textarea1" name="Textarea1" onpropertychange="MaxLength(this, 15)"></TEXTAREA><br /> 控制表单内容只能输入数字,中文....<script>function test() {if(document.a.b.value.length>50){alert("不能超过50个字符!");document.a.b.focus();return false;}}</script><form name=a onsubmit="return test()"><textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea><input type="submit" name="Submit" value="check"></form> 只能是汉字<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"> 只能是英文字符<script language=javascript>function onlyEng(){if(!(event.keyCode>=65&&event.keyCode<=90)) event.returnValue=false;}</script> <input onkeydown="onlyEng();"><input name="coname" type="text" size="50" maxlength="35" class="input2" onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">只能是数字<script language=javascript>function onlyNum(){if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))//考虑小键盘上的数字键 event.returnValue=false;}</script> <input onkeydown="onlyNum();"> 只能是英文字符和数字<input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"> 验证为email格式<SCRIPT LANGUAGE=Javascript RUNAT=Server>function isEmail(strEmail) {if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)return true;elsealert("oh");}</SCRIPT><input type=text onblur=isEmail(this.value)> 屏蔽关键字(sex , fuck) - 已修改<script language="JavaScript1.2">function test() {if((a.b.value.indexOf ("sex") == 0)||(a.b.value.indexOf ("fuck") == 0)){ alert("五讲四美三热爱"); a.b.focus(); return false;}}</script><form name=a onsubmit="return test()"><input type=text name=b><input type="submit" name="Submit" value="check"></form> 限制文本框里只能输入数字<input onkeyup="if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\D/g,'');"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,''))"> <PIXTEL_MMI_EBOOK_2005>2 </PIXTEL_MMI_EBOOK_2005> JAVA正则表达式语法(转)正则表达式语法正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式 匹配 /^\s*$/匹配空行。/\d{2}-\d{5}/验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/匹配 HTML 标记。下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:字符 说明 \将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”匹配“(”。^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“\n”或“\r”之后的位置匹配。$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与“\n”或“\r”之前的位置匹配。*零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。+一次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配。+ 等效于 {1,}。?零次或一次匹配前面的字符或子表达式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。{n}n 是非负整数。正好匹配 n 次。例如,“o{2}”与“Bob”中的“o”不匹配,但与“food”中的两个“o”匹配。{n,}n 是非负整数。至少匹配 n 次。例如,“o{2,}”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。“o{1,}”等效于“o+”。“o{0,}”等效于“o*”。{n,m}M 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,“o{1,3}”匹配“fooooood”中的头三个 o。'o{0,1}' 等效于 'o?'。注意:您不能将空格插入逗号和数字之间。?当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”。.匹配除“\n”之外的任何单个字符。若要匹配包括“\n”在内的任意字符,请使用诸如“[\s\S]”之类的模式。(pattern)匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果“匹配”集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用“\(”或者“\)”。(?:pattern)匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“or”字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。(?=pattern)执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?=95|98|NT|2000)' 匹配“Windows 2000”中的“Windows”,但不匹配“Windows 3.1”中的“Windows”。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。(?!pattern)执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?!95|98|NT|2000)' 匹配“Windows 3.1”中的 “Windows”,但不匹配“Windows 2000”中的“Windows”。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。x|y匹配 x 或 y。例如,'z|food' 匹配“z”或“food”。'(z|f)ood' 匹配“zood”或“food”。[xyz]字符集。匹配包含的任一字符。例如,“[abc]”匹配“plain”中的“a”。[^xyz]反向字符集。匹配未包含的任何字符。例如,“[^abc]”匹配“plain”中的“p”。[a-z]字符范围。匹配指定范围内的任何字符。例如,“[a-z]”匹配“a”到“z”范围内的任何小写字母。[^a-z]反向范围字符。匹配不在指定的范围内的任何字符。例如,“[^a-z]”匹配任何不在“a”到“z”范围内的任何字符。\b匹配一个字边界,即字与空格间的位置。例如,“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”。\B非字边界匹配。“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”。\cx匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是“c”字符本身。\d数字字符匹配。等效于 [0-9]。\D非数字字符匹配。等效于 [^0-9]。\f换页符匹配。等效于 \x0c 和 \cL。\n换行符匹配。等效于 \x0a 和 \cJ。\r匹配一个回车符。等效于 \x0d 和 \cM。\s匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。\S匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。\t制表符匹配。与 \x09 和 \cI 等效。\v垂直制表符匹配。与 \x0b 和 \cK 等效。\w匹配任何字类字符,包括下划线。与“[A-Za-z0-9_]”等效。\W与任何非单词字符匹配。与“[^A-Za-z0-9_]”等效。\xn匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如,“\x41”匹配“A”。“\x041”与“\x04”&“1”等效。允许在正则表达式中使用 ASCII 代码。\num匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,“(.)\1”匹配两个连续的相同字符。\n标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。\nm标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 n 和 m 是八进制数字 (0-7)。\nml当 n 是八进制数 (0-3),m 和 l 是八进制数 (0-7) 时,匹配八进制转义码 nml。\un匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (?)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值