Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中tollfree数的正则表达式_Java_Regex - Fatal编程技术网

java中tollfree数的正则表达式

java中tollfree数的正则表达式,java,regex,Java,Regex,我用这个正则表达式测试电话,应该是免费的 public static final Pattern patternTollFree = Pattern.compile("^((877)|(800)|(866)|(888))"); 因此,我只想得到那些#用户可能在字符串前面遗漏了1的地方,但我尝试了几种方法,但我无法让java与之匹配 public String changeRingTo( String changedRinger ) { if ( null == changedRinge

我用这个正则表达式测试电话,应该是免费的

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"));

region
的第二个参数是独占的,不是包含的。现在,您只允许它检查输入的前两个字符。你需要把它改成

if(patternTollFree.matcher(changedRinger).region(0,3.matches())


请注意,在正则表达式中使用
^
并在匹配器上指定区域是多余的。

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

请注意,这是特定于国家的。这很好,因为这仅适用于美国东南部。但请注意,电话号码可以采用多种不同的格式(如+1(877)1234567或001877123或空格等),格式仅适用于上面指定的格式。没有空格、破折号等。当代码到达我正在测试的区域时,它已被删除。谢谢,我不敢相信我错过了。这就是问题的症结所在。怎么能简化呢?8((66)|(77))@Arnite:将其更改为
if(changedRinger.matches(^(877 | 800 | 866 | 888)\\d+$)
并完全删除
patternTollFree
变量。如果您预编译了模式,它应该具有更好的性能。@Arnite:这种微观性能差异在您的应用程序中是否显著?如果不是,我会选择可读性而不是性能。