正則表達式學習筆記

        正則表達式可以用在前端對數據進行校驗也可以用在後端對數據進行校驗,比如校驗輸入金額,輸入郵箱,密碼,手機號,身份證號的的格式的合法性。另外正則正則表達式還可以用來在後端對請求數據進行過濾替換非法字符,防止腳本攻擊,過濾敏感字符。

        在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


        


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章