【问题标题】:Regex in java to validate a phone number does not workjava中用于验证电话号码的正则表达式不起作用
【发布时间】: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*

标签: java regex


【解决方案1】:

(\+237|237) [62][^014][0-9]{7} 是表达式以获取更多详细信息,您可以参考javaRegularExpressions。这是表达式above code test的在线测试。 对于空间,只需使用空间,它也会匹配空间。

【讨论】:

  • 谢谢你的表情走得很好
  • 我很乐意提供帮助。
【解决方案2】:

您的正则表达式正在搜索文字引号 ("),这导致匹配失败。此外,由于前缀是可选的,因此您需要在表达式的前缀部分后面加上? 来表明这一点。

以下正则表达式应匹配您的所有示例电话号码:

String regex = "(?:\\+?237 )?[26][235-9]\\d{7}";

【讨论】:

    【解决方案3】:

    你的正则表达式

    (\\+237|237)\" \"(6|2)(2|3|[5-9])[0-9]{7}
    

    您在其中使用了一个空格。使用\\s 代替检测一个空格。

    你也可以简化这个

    \\+237|237
    

    \\+?(237)
    

    最终的正则表达式看起来像

    (\\+?(237))\\s(6|2)(2|3|[5-9])[0-9]{7}
    

    【讨论】:

    • 谢谢你的表情也走得很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多