java - 根据 Java 中的预定义模式验证字符串

标签 java string

<分区>

我需要验证一个字符串。现在我通过循环和检查字符串中的每个字符来验证它。有没有任何方法可以使用模式、匹配器来验证它。

字符串由+-(连字符)和0-9组成

  • '+'只能出现在第一个字符
  • 不能有任何两个连续的连字符(-)
  • 如果'+'在第一个字符中,第二个字符不能是连字符
  • 如果字符串总共包含 10 到 13 位数字则它是有效的
  • 否则无效

最佳答案

试试这个:

string.matches("^(?=([\\D]?\\d){10,13}$)(?!.*--)(?!\\+-)\\+?[-0-9]*")

解释:

  • (?=([\\D]?\\d){10,13}$) = 前瞻 10-13 个带有可选前导字符的数字实例(满足一个连字符的要求)在数字或前导加号之间),仅此而已($ anchor 防止超过允许的 13 个)
  • (?!.*--) = 两个连字符的否定先行
  • (?!\\+-) = 加号然后连字符的否定前瞻
  • \\+?[-0-9]* = 可选的前导加号,后跟连字符或数字

这是一些测试代码(应该不会产生任何输出):

public static void main(String[] args) {
    String regex = "^(?=([\\D]?\\d){10,13}$)(?!.*--)(?!\\+-)\\+?[-0-9]*";

    String[] passes = { "+12345-12446-123", "123456-1-789", "123456789-0-1-2-3" };
    for (String string : passes)
        if (!string.matches(regex))
            System.out.println("should pass: " + string);

    String[] fails = { "123+435-1244", "123456--789", "+-123123123", "123", "11111-1-1-1-1-1-1111111111"};
    for (String string : fails)
        if (string.matches(regex))
            System.out.println("should fail: " + string);
}

关于java - 根据 Java 中的预定义模式验证字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123602/

相关文章:

php - 删除两个特定字符之间的逗号

Python:将字符串时间字典转换为日期时间

java - 尝试在 Selenium 中读取跨度之间的文本时出现数字格式异常

java - IIS 405..server.tas 文件

java - 如何在 block 内初始化变量?

java - 如何在 java 中使用 refreshtoken 在 Youtube 中上传视频

java - SimpleDateFormat不更新时间

java - 使用gradlew将JavaFX转换为Android

PYTHON多次从引用文件打印

java - 为什么 Wrapper Classes 没有类似于 Stringpool 的池?