我需要验证一个String。现在我通过循环和检查字符串中的每个字符来验证它。有没有办法使用Pattern,Matcher来验证它。
字符串由+
,-
(hypen)和0-9
答案 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
}