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

时间:2012-02-03 04:15:31

标签: java string

我需要验证一个String。现在我通过循环和检查字符串中的每个字符来验证它。有没有办法使用Pattern,Matcher来验证它。

字符串由+-(hypen)和0-9

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

3 个答案:

答案 0 :(得分:3)

试试这个:

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

说明:

  • (?=([\\D]?\\d){10,13}$) =预测10-13个带有可选前导字符的数字实例(适用于数字或前导加之间的连字符),并且全部($锚点可以防止出现更多超过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);
}

答案 1 :(得分:0)

你绝对可以直接或通过String.matches()

使用模式匹配

答案 2 :(得分:0)

您甚至可以按照以下方式执行此操作

if(string.length()>=10 && string.length()<=13){
    if(string.charAt(0)=='+' && string.charAt(1)!='-'){
        if(!string.contains("--"){
            //valid
        }else{
            //invalid
        }
    }else{
          //invalid
}else{
     //invalid  
}