使用regex / preg_match()检查十进制度数的坐标集是否有效

时间:2013-03-14 07:40:27

标签: php regex preg-match validation

我已经学会了一些基本的正则表达式来润湿我的脚,但这对我来说仍然有点太复杂了。我需要以十进制度数取一组用户输入的坐标(例子):

$latitude = -42.323432
$longitude = 176.232123

并使用PHP中的preg_match()函数检查它们是否有效。看起来很简单,但我不能为我的生活编写正则表达式,以确保没有错误的数据通过。我将检查彼此的北向和东向分离,以便使用preg_match()循环将foreach迭代两次。

我想我已经找到了所有必要的条件:

  • 第一个字符可以是减号,加号或数字。缺点和优点是可选的。
  • 小数点前的数字总数可以是1到3,但不能是0或高于3.
  • 因此,第二位或第四位必须有小数点。 (2.2332,-123.422)
  • 整个字符串中必须有一个小数点,整个字符串中可以有0 OR 1个小数或加号。
  • 我希望小数点后至少有3位小数的精度。没有最大限制(我只是将其自己舍入到6 dp)
  • 如果除了数字,小数点和可选的加号和减号之外还有任何字符,请拒绝它。

在此之后,我被困住了!在编写正则表达式时,将不胜感激。谢谢......

1 个答案:

答案 0 :(得分: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

(注意,这是未经测试的;))