<分区>
我需要验证一个字符串。现在我通过循环和检查字符串中的每个字符来验证它。有没有任何方法可以使用模式、匹配器来验证它。
字符串由+
、-
(连字符)和0-9
组成
- '+'只能出现在第一个字符
- 不能有任何两个连续的连字符(-)
- 如果'+'在第一个字符中,第二个字符不能是连字符
- 如果字符串总共包含 10 到 13 位数字则它是有效的
- 否则无效
<分区>
我需要验证一个字符串。现在我通过循环和检查字符串中的每个字符来验证它。有没有任何方法可以使用模式、匹配器来验证它。
字符串由+
、-
(连字符)和0-9
组成
最佳答案
试试这个:
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/