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

标签 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;
        }
    }

最佳答案

很多事情。

首先它不是perl。删除前导斜杠和尾随斜杠。 二、为什么非捕获组?我的意思是 (?: 你在这里根本不需要组。 第三为什么这么复杂?就说类似的话吧

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

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

关于用于美国州验证的 java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847249/

相关文章:

java - 在 Java fxml 应用程序中为动态创建的 Text 对象应用鼠标单击监听器

java - Tomcat 和带有百分号的 URLS

R 正则表达式/gsub : extract part of pattern

python - 如何在Python中将字符串与点匹配

javascript - 匹配正则表达式 : [everything before number], [数字]

java - Java中有没有办法让事件带有变量?里面的例子

java - 从 Tomcat 5.5 升级到 Tomcat 7

java - Oracle 到 Hibernate 到 ISO 8601 日期格式

python - 获取 pandas 数据框中正则表达式匹配的索引不起作用

python - 如何在 python 中编写正则表达式来匹配这个?