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

Regex 纬度/经度问题的MapServer正则表达式验证,regex,validation,latitude-longitude,mapserver,Regex,Validation,Latitude Longitude,Mapserver,我下面的代码是根据Zehra Nasif的回答(2014年5月15日20:00)。虽然我下面的代码是针对MapServer的,但我认为vanilla 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

我下面的代码是根据Zehra Nasif的回答(2014年5月15日20:00)。虽然我下面的代码是针对MapServer的,但我认为vanilla 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时,
num_miles
起作用;这也只是为了说明他们的引擎。但是,
memberlong
memberlat
(或者至少其中一个--无法确定,因为调试没有精确定位)抛出错误
msApplySubstitutions():正则表达式错误。参数模式验证失败
,我认为我的正则表达式不正确。我认为,至少就目前而言,可以安全地假设memberlong(经度)总是负值,memberlat(纬度)总是正值,尽管从长期来看,他们应该能够处理负值/正值。我只需要继续前进


有什么想法吗?

不是所有的正则表达式风格都支持,
(?:…)
构造。例如,POSIX ERE/BRE和XML模式正则表达式仅支持捕获组

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

所以你需要使用

'memberlong'”^-?[0-9]{1,3}\[0-9]{1,30}$”
‘memberlat’“^[0-9]{1,3}\[0-9]{1,30}$”

num_miles如何与1200英里匹配?它匹配1个数字。它应该是
[0-9]+
(或
\d+
)是的,它确实有效。我想它只需要0-9之间的任何数字。它需要0-9之间的任何一个数字。我可以向您保证,
[0-9]
与1200不匹配。我认为在这种情况下,它是有效的,因为它匹配了1个数字,这对于测试是如何进行的已经足够好了。但它并不匹配1200。正确的表达式是
^[0-9]+$
,老实说,我不知道如何表达。但是看看他们为parcelid发布的示例代码——除了限制为5-8个字符之外,逻辑是相同的。您不需要非捕获组,
'memberlong'^-?[0-9]{1,3}\.[0-9]{1,30}$“
'memberlat'^[0-9]{1,3}\.[0-9]{1,30}$”
应该可以工作。