【发布时间】:2018-02-03 09:46:54
【问题描述】:
我想写一个允许验证电话号码的正则表达式,可以这样写:237 698888888 或 +237 658888888 或 67883888 ...,实际上电话号码必须遵守以下条件(+237| 237)'空格'(6|2)(5|8|2|3|9|7|6) [0-9] {7}
如果用户有意输入带前缀的号码,则前缀必须是 237 或 +237,否则他决定输入不带前缀的号码,在这种情况下,他必须输入 9 位数字,第一个数字必须是 6或者 2,第二个数字必须在 2,3,5,6,7,8 和 9 之间;剩下的 7 位数字可供选择,即 [0-9] {7}。这是我的java代码:
String regex = "(\\+237|237)\" \"(6|2)(2|3|[5-9])[0-9]{7}";
String sPhoneNumber = "237 278889999";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(sPhoneNumber);
if (matcher.matches()) {
Log.e("|==FILTER_NUM==>>","Phone Number Valid");
}
else
{
Log.e("|==FILTER_NUM==>>","Phone Number must be in the form XXX XXXXXXXX");
}
返回这个
E/|==FILTER_NUM==>>:电话号码必须采用 XXX XXXXXXXXX 格式
请检查我的代码并告诉我出了什么问题
对不起我的英语:)
【问题讨论】:
-
那么问题是什么?您的正则表达式以您不期望的方式工作,或者您的日志消息以 E/ 开头?
-
您是否尝试通过任何在线正则表达式构建器或测试验证您的正则表达式?
-
什么失败了?您能否提供一些应该被视为有效但不是有效的电话号码示例?
-
我认为我的正则表达式写得不好,因为我传入参数的数字是有效的,所以
matcher.matches ()应该返回 true,但它返回 false。 -
您在正则表达式
\" \"中对空间进行了错误编码 - 这样正则表达式试图匹配引号。改用这个正则表达式:(\\+237|237)\s*(6|2)(2|3|[5-9])[0-9]{7}其中空格(零或更多)被编码为\s*