-1

我想为可以编辑角度值的控件实现验证器。

格式为DDD°MM'SS,xxx.

我想接受的值在区间内[0°00'00'' - 359°59'59'']

第二部分应编辑为浮点数。

4

3 回答 3

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)?$

此外,如果MMSS部分必须使用前导零,则使用模式

^([0-2]\d|3[0-5]|\d)?\d\xB0([0-5])\d\x27([0-5])\d(?:,\d{1,3})?(\x27{2}|\x22)?$

所有上述模式都允许SS部分数字后跟''"符号,以及根本没有符号。

于 2013-11-09T14:44:25.183 回答
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
于 2013-11-09T14:32:46.627 回答
0

如果您在 .NET 中执行此操作,根据您的标签,我不会在 Regex 中完成所有操作。我会通过正则表达式检索相关部分,将它们转换为整数,并验证它们是否在范围内作为第二步。

这会给你留下一些类似于(\d{1,3})°(\d{2})'(\d{2})''你的正则表达式的东西,我相信你可以自己计算出其余的 .NET 代码。

于 2013-11-09T14:29:05.057 回答