请考虑以下事项:
$lat = '89° 5'; // works
if(preg_match('/^(([0-8]\d|\d)°?(\s?([0-5]\d|\d))?)(N|S)?$/', $lat, $la)){
$ck = 'DD° MM format --> ';
}
else{
$test = 'invalid $lat format';
}
if(isset($ck)){
$test = $ck.$la[0];
}
echo $test;
当$lat = '89°5'
一切正常时也是如此。我试图理解的是$lat = '89 5'
失败的原因?也许我的大脑不起作用,但由于°?
,似乎最后一个不应该是无效的格式。谢谢你帮助我理解。
答案 0 :(得分:3)
使用/(*UTF8)^(([0-8]\d|\d)°?(\s?([0-5]\d|\d))?)(N|S)?$/
来自http://www.pcre.org/pcre.txt:
为了处理UTF-8字符串,您必须构建具有UTF支持的PCRE的8位库,此外,必须使用PCRE_UTF8选项标志调用pcre_compile(),否则模式必须以序列开头(* UTF8)或(* UTF)。当这两种情况都是这种情况时,模式和与之匹配的任何主题字符串都被视为 UTF-8字符串,而不是单个1字节字符的字符串。
因此,PCRE引擎仍将°
视为两个单独的字符,并且仅将后半部分视为可选字段。
注意:有趣的是,我只能在安装时使用(小写)u
修饰符获得预期结果。 http://php.net/manual/en/reference.pcre.pattern.modifiers.php。
注意2:我的原始评论有两个选项,不要使用另一个选项,因为它打破了目前适合你的测试。