首先,您需要了解免费电话号码的格式。
日本免费电话也就那么几个号段:0120、0990、0180、0570、0800等开头的,0800稍微特殊点,在手机号里面有080 开头,但是后面不一样了。
关于免费电话号码的划分,全部写出来是不现实的。大概四10位对应4位-3位-3位,11位对应4位-3位-4位。
上代码:
function checkFreephoneNumber(string $str): int|false {
return preg_match("/\A0((12|99|18|57)0[-(]?\d{3}[-)]?\d{3}|800[-(]?\d{3}[-)]?\d{4})\z/", $str);
}
这是对所描述的解释。
- / :分隔符
- \A :转义序列 要搜索的字符串的开头
- ( ) :子图案
- \d : 与十进制数字[0-9]相同
- { } :重复
- [ ] : 字符类
- ? :与量词 {0,1}相同
- | :选择
- \z :搜索目标字符串的转义序列末尾
更简单地,去除连字符和圆括号后,通过 /\A0((12\99\18\57)0\d{6}\800\d{7})\z/ 的方法也不错。