我想为可以编辑角度值的控件实现验证器。
格式为DDD°MM'SS,xxx
。
我想接受的值位于[0°00'00'' - 359°59'59'']
区间内。
第二部分应编辑为浮点数。
答案 0 :(得分:1)
如果 在单个正则表达式中执行此操作:
^(3[0-5][0-9]|[12][0-9]{2}|[1-9]?[0-9])°[0-5][0-9]'[0-5][0-9](,[0-9]+)?''$
<强>说明:强>
^ # Start of string
( # Start of group:
3[0-5][0-9] # Match either a number between 300 and 359
| # or
[12][0-9]{2} # a number between 100 and 299
| # or
[1-9]?[0-9] # a number between 0 and 99 (no trailing zeroes allowed!)
) # End of group
° # Match °
[0-5][0-9] # Match a number between 00 and 59 (trailing zero required!)
' # Match '
[0-5][0-9] # Match a number between 00 and 59 (trailing zero required!)
(,[0-9]+)? # Match optional decimal part
'' # Match ''
$ # End of string
答案 1 :(得分:1)
如果DDD
部分不允许前导零,SS
的可选小数部分长度为1-3位,逗号为小数分隔符,则应使用正则表达式
^([1-2]\d|3[0-5]|[1-9])?\d\xB0([0-5])?\d\x27([0-5])?\d(?:,\d{1,3})?(\x27{2}|\x22)?$
如果DDD
部分允许前导零,则使用模式
^([0-2]\d|3[0-5]|\d)?\d\xB0([0-5])?\d\x27([0-5])?\d(?:,\d{1,3})?(\x27{2}|\x22)?$
此外,如果MM
和SS
部分必须使用前导零,则使用模式
^([0-2]\d|3[0-5]|\d)?\d\xB0([0-5])\d\x27([0-5])\d(?:,\d{1,3})?(\x27{2}|\x22)?$
以上所有模式都允许SS
部分中的数字跟随''
或"
符号,并且完全没有符号。
答案 2 :(得分:0)
如果您在.NET中执行此操作,根据您的标记,我不会在Regex中完成所有操作。我通过正则表达式检索相关部分,将它们转换为整数,并验证它们是否在范围内作为第二步。
这会为你的正则表达式留下(\d{1,3})°(\d{2})'(\d{2})''
之类的东西,我相信你可以自己计算其余的.NET代码。