2

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

$纬度 = -42.323432
$经度 = 176.232123

preg_match()并使用PHP中的函数检查它们是否有效。看起来很简单,但我无法为我的一生编写正则表达式来确保没有坏数据通过。我将检查彼此分开的北向和东向,因此这preg_match()将使用foreach循环迭代两次。

我想我已经弄清楚了所有必要的条件:

  • 第一个字符可以是减号、加号或数字。缺点和优点是可选的。
  • 小数点前数字的总数可以是 1 到 3,但不能是 0 或大于 3。
  • 因此,第二位或第四位必须有小数点。(2.2332, -123.422)
  • 整个字符串中必须有一个小数点,整个字符串中可以有 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 回答