什么正则表达式将检查GPS值?

Ric*_*uez 6 php regex preg-match

我让用户通过表单输入GPS值,它们都具有相同的形式,例如:

49.082243,19.302628  

48.234142,19.200423  

49.002524,19.312578
Run Code Online (Sandbox Code Playgroud)

我想用PHP检查输入的值(使用preg_match(),我猜),但因为我在正则表达式中不好(哦,笨我,我应该最后学习它,我知道),我不知道怎么写表达方式.

显然,这应该是:
2个(数字),1个(点),6个(数字),1×(逗号),2个(数字),1个(点),6个(数字)

有关如何在正则表达式中写这个的任何建议吗?

Chr*_*son 13

我看到的其他答案没有考虑经度从-180到180,纬度从-90到90.

正确的正则表达式是(假设顺序是"纬度,经度"):

/^(-?[1-8]?\d(?:\.\d{1,6})?|90(?:\.0{1,6})?),(-?(?:1[0-7]|[1-9])?\d(?:\.\d{1,6})?|180(?:\.0{1,6})?)$/
Run Code Online (Sandbox Code Playgroud)

这个正则表达式包括纬度不小于-90且不大于90,经度不小于-180且不大于180,同时允许它们输入整数以及从1到1的任意小数位数6,如果你想允许更高的精度,只需将{1,6}更改为{1,x},其中x是小数位数

此外,如果您在组1上捕获,则获得纬度,组2上的捕获获得经度.


Mat*_*all 11

就像是:

/^(-?\d{1,2}\.\d{6}),(-?\d{1,2}\.\d{6})$/
Run Code Online (Sandbox Code Playgroud)
  • ^ 在输入开始时锚定
  • -? 允许但不要求负号
  • \d{1,2} 需要1或2个十进制数字
  • \. 需要一个小数点
  • \d{6} 需要正好6个十进制数字
  • , 匹配一个逗号
  • (重复前5个子弹)
  • $ 在输入结束时锚定

我已经包括捕获括号以允许您提取单个坐标.如果您不需要,请随意省略它们.

全面有用的正则表达式引用:http://www.regular-expressions.info/reference.html