我有这个正则表达式来测试应该免费的电话#。

public static final Pattern patternTollFree = Pattern.compile("^((877)|(800)|(866)|(888))");


因此,我只想获取那些用户可能已将1留在字符串开头的那些#,但是我尝试了几件事,但无法获取java进行匹配。

public String changeRingTo( String changedRinger )
{
    if ( null == changedRinger || changedRinger.length() != 10)
        return changedRinger;
    if ( patternTollFree.matcher(changedRinger).region(0, 2).matches() )
        changedRinger = '1' + changedRinger;
    return changedRinger;
}


我无法通过下面的第二个测试用例成功。我究竟做错了什么?

assertEquals( "Regex not working", "8189091000", of.changeRingTo("8189091000"));
assertEquals( "Regex not working", "18769091000", of.changeRingTo("8769091000"));

最佳答案

您的第二个测试用例失败,因为它以876开头,这不是有效的免费电话前缀。另外,如另一个答案所示,您应该将region(0, 2)更改为region(0, 3),尽管整个行可以大大简化。

关于java - 用于Java中免费电话号码的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2668307/

10-13 04:57