实际上我在内部应用程序中使用它生成一个xml,其代码是用java编写的。但是在应用程序中如果^(249)?1 \ d {8} $然后它转发到下一个操作,如果数字不在上面然后给用户错误的输入,即我没有直接与java代码交互我想要一个正则表达式用于移动号码验证。正则表达式模式应该是这样的,它必须接受249国家代码(仅一次),然后是'1'(仅一次),然后是8位数。国家/地区代码应该是可选的。如果国家/地区代码不存在,则只能接受以1开头的9位数字。
同样,否定上述条件的正则表达式是指任何不以249开头并且长度为12的移动号码,如果长度为9且不以1开头。 正则表达式应该接受像
这样的数字249189372837 start with 249 followed by 1 and must of 12 digit length
249123476358
183526352 if start with 1 and must of 9 digit length (249 optional)
不应接受
2431983645238 country code not 249
24924356383799 more then 12 digit including country code
249212236472 not 1 after 249
1232345678 more length then 9
12345323 less length then 9
456278399 if 249 is not there then mut start with 1 with length of 9
所以我需要正则表达式来接受上述条件和一个正则表达式,它接受除了接受条件之外的任何数字。
我从^(249)([1]{1})([0-9]{8})$
开始尝试249
然后(1)然后是8位和^(1)([0-9]{8})$
,当数字以1开头后跟8位数时,我需要一个正则表达式来处理这两个条件
实际上我在内部应用程序中使用它生成一个xml,其代码是用java编写的。但是在应用程序中如果^(249)?1 \ d {8} $(由@ rock321987回答)然后它转发到下一个操作,如果数字不高于正则表达式然后给用户错误的输入,即我不直接与java代码交互< / p>
提前感谢任何帮助和建议。
答案 0 :(得分:2)
这个正则表达式将起作用
^(249)?1\d{8}$
<强> Regex Demo 强>
第二部分
(?=^1)(^\d{1,8}$|^\d{10,}$)|(?=^2491)(^\d{1,11}$|^\d{13,}$)
(?!^(2491|1))^(\d{9}|\d{12})$
Java代码
Scanner x = new Scanner(System.in);
String pattern = "^(249)?1\\d{8}$";
Pattern r = Pattern.compile(pattern);
while (true) {
String line = x.nextLine();
Matcher m = r.matcher(line);
if (m.find()) {
System.out.println("Found -> " + m.group());
} else {
System.out.println("Not Found");
}
}
<强> Ideone Demo 强>