緯度経度を正規表現でチェックする方法（php preg_match）


緯度経度のバリデーションに正規表現を使おうと思っています。  
また、前提条件としてはphpのpreg_matchを使用します。

条件が  
1\. 値が-180から180の範囲である。  
2．実数部は6桁まで  
3．ゼロ埋めは許容

ご教授ください。




6桁という条件が微妙ですが、

[code]

    OK: 180 180.000 180.00 180.0 090.000 009.000
    NG: 180.001  90.0000 0.11111 0.
    
[/code]

と解釈しました。

[code]

    /\A-?(180(\.0{1,3})?|(1[0-7]\d|0?\d{2}|0?0?\d)(\.\d{1,3})?)\z/
    
[/code]

こうでしょうか。(テストしてません)

非常にわかりにくいので、

  * 正規表現ではフォーマットのチェック
  * 範囲内かどうかは数値に変換して比較

にした方がよいでしょう




6桁という条件が微妙ですが、

[code]

    OK: 180 180.000 180.00 180.0 090.000 009.000
    NG: 180.001  90.0000 0.11111 0.
    
[/code]

と解釈しました。

[code]

    /\A-?(180(\.0{1,3})?|(1[0-7]\d|0?\d{2}|0?0?\d)(\.\d{1,3})?)\z/
    
[/code]

こうでしょうか。(テストしてません)

非常にわかりにくいので、

  * 正規表現ではフォーマットのチェック
  * 範囲内かどうかは数値に変換して比較

にした方がよいでしょう

