正则表达式可以用在前端对数据进行校验也可以用在后端对数据进行校验,比如校验输入金额,输入邮箱,密码,手机号,身份证号的的格式的合法性。另外正则正则表达式还可以用来在后端对请求数据进行过滤替换非法字符,防止脚本攻击,过滤敏感字符。
在Java后台代码中的的正则表达式校验,在后台代码中需要用到Pattern和Matcher类,示例如下:
package com.regalar.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpressionUtil {
<span style="white-space:pre"> </span>public static boolean matchRegex(String regex,String data){
// 将给定的正则表达式编译到模式中。
Pattern pattern=Pattern.compile(regex);
// 创建匹配给定输入与此模式的匹配器。
Matcher matcher=pattern.matcher(data);
return matcher.matches();
}
public static void main(String[] args) {
//"^[1-9]?[0-9]{1}\\.{1}[0-9]{1}[0-9]{1}%"判断一个百分数
String regex="^[1-9]?[0-9]{1}\\.{1}[0-9]{1}[0-9]{1}%";
String str="12.00%";
System.out.println(matchRegex(regex,str));
}
}
下面就是介绍一下,正则表达式的基本规则:
'^'指出一个字符串的开始和结束
'$'指出一个字符串的结束
'*'表示0个或者若干个
'+'表示至少一个可以有多个
'?'表示0个或者1个
‘{m,n}’大括号用来表示范围表示m到那个,另外可以这样写{1,}表示大于等于1个。注意{m,n}必须指出下限,可以不指出上限,'{0,}'相当于'*';'{0,1}'相当于'?';'{1,}'相当于'+'.
'[]'方括号表示某些字符允许在一个字符串中的某一特定位置出现,如'[a-zA-Z0-9]'表示字母或者数字。
'.'表示任意一个字符
'|'表示或。
为了便于理解,举一些例子:
'^ab'表示字符以ab开头。
'ab$'表示字符串以ab结尾。
'a*'表示有0个或者多个a
'b+'表示有1个或者多个b
'b?'表示有0个或者1个b
'a{1,4}'表示有1-4个a。
'a{1,}'表示至少1个a
'[a-zA-Z0-9]'表示字母或者数字
'\'表示转义,如'\\'表示'\'
'.{1,}b+?'表示任意字符开头,以一个b或者多个b结尾的字符串。以上例子可以自己在替换上面的regex正则表达式和字符串,运行进行验证,注意转移用'\'。
正则表达式在前端的使用主要是js中用来对数据进行校验。
<script type="text/javascript">
function validate(){
var reg = new RegExp("^[0-9]*$");
var obj = document.getElementById("name");
if(!reg.test(obj.value)){
alert("请输入数字!");
}
if(!/^[0-9]*$/.test(obj.value)){
alert("请输入数字!");
}
}
</script>
注意:js中正则表达式写法一般又种方式,第二种方式是 /你自己定义的正则表达式/.test(校验的值) 返回布尔类型。
与定义字符类:
\w表示字母或者数字或者下划线,相当于[a-zA-Z0-9_],如:
String regex="^\\w{1,}$";
String str="hahajjja7AQ_njs9_9s09";
\s表示任意多个空白字符,如:
String regex="^[\\s]*$";
String str=" ";
System.out.println(matchRegex(regex,str));
\d 数字:[0-9],如:
String regex="^[\\d]*$";
String str="92010291029128128";
System.out.println(matchRegex(regex,str));
\D非数字,[^0-9],注意:[]里面的^表示非,如:
String regex="^[\\D]*$";
String str="jisajsjasjia";
System.out.println(matchRegex(regex,str));
(?!pattern):非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。,如
^(?![\\d]+$)(?![a-zA-Z]+$)(?![!#$%^&*_]+$)[\\da-zA-Z!#$%^&*_]{8,20}$,可用来排除纯字母,纯数字,纯特殊字符,非8-20位的字符串。
String regex="^(?![\\d]+$)(?![a-zA-Z]+$)(?![!#$%^&*_]+$)[\\da-zA-Z!#$%^&*_]{8,20}$";
String str="aaaqwqwa";
System.out.println(matchRegex(regex,str));
参考:http://www.cnblogs.com/light169/archive/2006/10/18/532347.html
http://colbybobo.iteye.com/blog/1769993