2014-01-09 67 views
0

我想要一個正則表達式,它只會驗證字符串是否有值。正則表達式只驗證字符串是否有值?

我想出了這個模式:

pattern: '^$|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)' 

的邏輯是:^ $ - 應該匹配空字符串,和|是OR。

所以英文是空字符串或模式的其餘部分。

如果字符串爲空則表示該正則表達式應該返回true作爲匹配,但事實並非如此。

我錯過了什麼?

+1

爲什麼不檢查是否字符串爲空在運行reg前? –

+0

已經這樣做了,但它是基於規則的驗證框架的一部分。所以不像編寫自定義代碼那麼簡單。 –

+0

它的語言是什麼?如果語言支持ERE或PCRE,它會工作。 – devnull

回答

0

嘗試以下操作:

^(?:.*([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?).*)?$ 
0

這取決於你使用的是什麼語言。 \A匹配字符串的開頭,\Z匹配字符串的結尾。

(\A\Z)|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?) 

簡短的Java例子

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

public class HelloWorld{ 

    public static void main(String []args){ 
     Pattern pattern = Pattern.compile("(\\A\\Z)|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)"); 
     String str1 = ""; 
     String str2 = "s"; 
     String str3 = "abcdababab3"; 
     Matcher matcher = pattern.matcher(str1); 
     if(matcher.find()){ 
       System.out.println("True:" + matcher.group()); 

     } 
     matcher = pattern.matcher(str2); 
     if(matcher.find()){ 
       System.out.println("True:" + matcher.group()); 

     } 
     matcher = pattern.matcher(str3); 
     if(matcher.find()){ 
       System.out.println("True:" + matcher.group()); 

     } 
    } 
} 

輸出:

True: 
True:abcdababab3 

它匹配空字符串和abcdabab3,但不是s

相關問題