2014-01-09 70 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

相关问题