簡體   English   中英

PHP preg_match()PCRE邏輯問題?

[英]PHP preg_match() PCRE logic issue?

考慮以下:

$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'失敗了? 也許我的大腦不起作用,但似乎最后一個因為°?而不應該是無效的格式°? 謝謝你幫我理解。

使用/(*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 modifer獲得預期的結果。 http://php.net/manual/en/reference.pcre.pattern.modifiers.php

注2:我原來的評論有兩個選項,不要使用另一個選項,因為它打破了目前適合你的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM