java正则表达式输入比模式短

标签 java regex matcher

通过使用正则表达式,我尝试在用户键入时验证用户输入。

我的模式是这样的:“(\\w{3})(\\d{7})(\\w{3})”。 有效输入可以是“XYZ0001112CCC”

我想将其验证为用户类型。我的意思是 "A", "AB", "ABC", "ABC12", "ABC123", ..., "ABC1234567XY" 也不应该失败。但是 "A1", "AB2", "ABCD123", ..., "ABC1234567XY1" 一定会失败。只要输入不违反规则,我想假设它“到目前为止有效”。这可以通过正则表达式实现吗?

最佳答案

我将使用“一次或根本不”量词的组合来表示第一个字母之后的每个后续部分,并使用后视来验证输入的先前部分。

例如:

//                           |first letters (1 to 3)
//                                        | if 3 letters precede...
//                                                         | digits (1 to 7)
//                                                                   | if 7 digits precede...
//                                                                               | 3 letters
Pattern p = Pattern.compile("[a-zA-Z]{1,3}((?<=[a-zA-Z]{3})\\d{1,7})?((?<=\\d{7})[a-zA-Z]{3})?");
String[] inputs = {"XYZ0001112CCC", "A", "AB", "ABC", "ABC12", "ABC123", "A1", "AB2", "ABCD123","ABC1234567XY1"};
Matcher m;
for (String input: inputs) {
    m = p.matcher(input);
    System.out.println("Input: " + input + " --> Matches? " + m.matches());
}

输出:

Input: XYZ0001112CCC --> Matches? true
Input: A --> Matches? true
Input: AB --> Matches? true
Input: ABC --> Matches? true
Input: ABC12 --> Matches? true
Input: ABC123 --> Matches? true
Input: A1 --> Matches? false
Input: AB2 --> Matches? false
Input: ABCD123 --> Matches? false
Input: ABC1234567XY1 --> Matches? false

注意

我已将您的 \\w 表达式更改为字符类 [a-zA-Z],因为 \\w 也验证数字。 [a-zA-Z] 的替代方案是:

  • \\p{Alpha}
  • [a-z] 带有 Pattern.CASE_INSENSITIVE 标志

最后说明

我的Pattern 将最后一个字母作为一个 3 字母组。 如果您还接受 1 或 2 个字母,则只需将最后一个量词表达式 {3} 更改为 {1,3}

关于java正则表达式输入比模式短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19589626/

相关文章:

java - Struts 升级后 Struts Action Context 发生变化

java - 如何在 servlet 中设置 session 变量并在 JSP 中获取它?

javascript Regex 日期早于 1970 年 1 月 1 日

ruby - Rails rspec - 如何检查具有 ", if: :direct"子句的验证模型

java - 使用maven插件生成.jasper

java - 解析错误的 XML

regex - 单引号内的单引号问题 - Bash 命令行 GNU 并行

javascript - 这三个正则表达式有效吗?

java - 我希望 Java Pattern.compile 识别正整数或负整数或小数

具有固定开始和重复 block 的字符串的Java正则表达式