纬度/经度问题的MapServer正则表达式验证



下面的代码大致是正则表达式中的Zehra Nasif答案,用于匹配纬度/经度坐标?(2014年5月15日20:00(。虽然我下面的代码是针对MapServer的,但我认为普通RE应该可以工作;文档上写着"谷歌正则表达式"!这是我的代码:

VALIDATION
# '^[0-9]{5,8}$' # %parcelid% must be numeric and between 5 and 8 characters
'memberlong' "^-?[0-9]{1,3}(?:.[0-9]{1,30})$" # -91.6666 
'memberlat' "^[0-9]{1,3}(?:.[0-9]{1,30})$" # 30.6666
'num_miles' "[0-9]+$"    #  1200 works. 
END

第一行是根据Mapserver文档——这只是为了说明他们的引擎。当输入参数为1200时,CCD_ 1工作;这也只是为了说明他们的引擎。然而,memberlongmemberlat(或者至少其中一个(都不能确定,因为调试没有精确定位(都会抛出错误msApplySubstitutions(): Regular expression error. Parameter pattern validation failed,我认为我的正则表达式是不正确的。我认为,至少就目前而言,可以放心地假设memberlong(经度(总是负值,memberlat(纬度(总是正值,尽管从长远来看,它们应该能够处理负值/正值。我只需要继续前进。

有什么想法吗?

并非所有regex风格都支持非捕获组、(?:...)构造。例如,POSIXERE/BRE和XMLSchema正则表达式风格仅支持捕获组。

此外,在您的情况下,您可以简单地将非捕获组删除为(?:xxx)=xxx。只有当我们需要引入交替时,或者当我们需要用量词重复一系列模式时,我们才会使用非捕获组。

所以你需要使用

'memberlong'    "^-?[0-9]{1,3}.[0-9]{1,30}$"
'memberlat'     "^[0-9]{1,3}.[0-9]{1,30}$"

最新更新