美国州验证的java正则表达式

时间:2011-07-27 15:44:20

标签: java regex

我写了这个java方法来做正则表达式并丢失了一些东西,因为它在所有条件下都失败了。我是正则表达式的新手,无法弄清楚什么导致它失败的一切。有些专家可以帮助我。

public static boolean isStateValid(String state){
        String expression = "/^(?:A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])*$/";
        CharSequence inputStr = state;
        Pattern pattern = Pattern.compile(expression);
        Matcher matcher = pattern.matcher(inputStr);
        if (matcher.matches()) {
            return true;
        }else{
            return false;
        }
    }

阅读评论后更改为此,并且仍然无法正常工作

public static boolean isStateValid(String state) {
        CharSequence inputStr = state;
        Pattern pattern = Pattern
                .compile("AL|AK|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY|al|ak|ar|az|ca|co|ct|dc|de|fl|ga|hi|ia|id|il|in|ks|ky|la|ma|md|me|mi|mn|mo|ms|mt|nc|nd|ne|nh|nj|nm|nv|ny|oh|ok|or|pa|ri|sc|sd|tn|tx|ut|va|vt|wa|wi|wv|wy");
        Matcher matcher = pattern.matcher(inputStr);
        if (matcher.matches()) {
            return true;
        } else {
            return false;
        }
    }

5 个答案:

答案 0 :(得分:9)

很多事情。

首先它不是perl。删除前导和尾部斜杠。 二,为什么非捕获组?我的意思是(?:你根本不需要小组。 为什么如此复杂?只需说出像

这样的内容

Pattern.compile( “AL | AK | AR | AZ | CA”);

等所有州。您的优化没有任何好处。它只会使正则表达式变得更复杂。

答案 1 :(得分:3)

它不喜欢模式开头和结尾的/个字符。当我删除它,它的工作原理。另外,我认为最后你不想要*重复字符。

答案 2 :(得分:2)

这个区分大小写,包括美国领土:

^(?-i:A[LKSZRAEP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$

但是,我认为使用正则表达式是最重要的。使用某种列表或数组。

答案 3 :(得分:1)

这是练习正则表达式的练习,还是将在生产环境中使用的练习?

如果是后者,那么使用查找列表会更好。在这种情况下,正则表达式会混淆并使您尝试执行的操作过于复杂。

答案 4 :(得分:0)

我没有使用过这个特殊的工具,但是使用了类似的商业工具,但我认为你会从以下工具中受益:http://sourceforge.net/projects/regexevaluator/