我想为可以编辑角度值的控件实现验证器。
格式为DDD°MM'SS,xxx
.
我想接受的值在区间内[0°00'00'' - 359°59'59'']
。
第二部分应编辑为浮点数。
如果部分不允许使用前导零,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
部分数字后跟''
或"
符号,以及根本没有符号。
如果您必须在单个正则表达式中执行此操作:
^(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
如果您在 .NET 中执行此操作,根据您的标签,我不会在 Regex 中完成所有操作。我会通过正则表达式检索相关部分,将它们转换为整数,并验证它们是否在范围内作为第二步。
这会给你留下一些类似于(\d{1,3})°(\d{2})'(\d{2})''
你的正则表达式的东西,我相信你可以自己计算出其余的 .NET 代码。