2

私は基本的な正規表現を少し学んで足を濡らしましたが、それでも私には少し複雑すぎます。ユーザーが入力した一連の座標を 10 進度で取得する必要があります (例):

$緯度 = -42.323432
$経度 = 176.232123

preg_match()PHPの関数を使用して有効かどうかを確認します。簡単に思えますが、悪いデータが通過しないことを保証するような正規表現を一生書くことはできません。ループpreg_match()を使用して 2 回繰り返されるように、北距と東距を別々に確認します。foreach

必要な条件をすべて把握したと思います。

  • 最初の文字は、マイナス、プラス、または数字のいずれかです。マイナスとプラスはオプションです。
  • 小数点の前の数値の合計数は 1 から 3 にすることができますが、0 または 3 より大きくすることはできません。
  • したがって、2 桁目または 4 桁目に小数点がなければなりません。(2.2332, -123.422)
  • 文字列全体で正確に 1 つの小数点が必要です。文字列全体で 0 または 1 個のマイナスまたはプラスが存在する可能性があります。
  • 小数点の後に少なくとも 3 桁の精度が必要です。上限はありません (私は単純に 6 dp に丸めます)
  • 数字、小数点、オプションのプラスとマイナス以外の文字がある場合は拒否します。

この後、私は立ち往生しています!正規表現を書く際に助けていただければ幸いです。ありがとう...

4

1 に答える 1

8

それを突き刺してみましょう:

  /^[+\-]?[0-9]{1,3}\.[0-9]{3,}\z/

内訳:

  ^                 - start of string
  [+\-]?            - zero or one from set of `+` and `-`
  [0-9]{1,3}        - 1 to 3 digits
  \.                - decimal point
  [0-9]{3,}         - 3 or more digits
  \z                - end of string

(注、これはテストされていません;))

于 2013-03-14T07:44:35.710 に答える