我需要使用RegEx验证六进制值,例如:24°12'55,4“或32°24'15,4”。

现在,我有下一个RegEx,它与度和分钟数匹配成功:

^([0-8][0-9]|[9][0])°\s([0-4][0-9]|[5][9])'$

但是,添加秒验证器时会出现问题:
^([0-8][0-9]|[9][0])°\s([0-4][0-9]|[5][9])'\s([0-4][0-9]|[5][9],[0-9])''$

我是RegEx的新手,有什么想法吗?

最佳答案

首先,您有一些冗余:

^([0-8][0-9]|[9][0])°\s([0-4][0-9]|[5][9])'$

可以变成公正的:
^([0-8][0-9]|90)°\s([0-4][0-9]|59)'$

接下来,您遇到一个逻辑问题,在第二场比赛中,您将0-4匹配,然后将0-9匹配(即00-49),然后仅匹配59。您可以将其更改为:
^([0-8][0-9]|90)°\s[0-5][0-9]'$

匹配00-59

接下来,让我们看看您的秒修改:
\s([0-4][0-9]|[5][9],[0-9])''$

与以前相同的问题,只不过现在您添加了一个小数,但没有在|的两边添加因此它只会在一侧匹配,如果我们像固定最后一个那样修复此问题,则会得到:
^([0-8][0-9]|90)°\s[0-5][0-9]'\s[0-5][0-9],[0-9]''$

接下来,您有两个单引号而不是双引号,因此请解决此问题:
^([0-8][0-9]|90)°\s([0-5][0-9])'\s[0-5][0-9],[0-9]"$

现在我们要问自己,这个数字的第一位是强制性的吗?可能不会。因此,使用?将其标记为可能丢失
^([0-8]?[0-9]|90)°\s[0-5]?[0-9]'\s[0-5]?[0-9],[0-9]"$

接下来,第二部分的小数部分是强制性的吗?可能不是,因此将其标记为可能丢失:
^([0-8]?[0-9]|90)°\s[0-5]?[0-9]'\s[0-5]?[0-9](,[0-9])?"$

最后,我假设除度数之外的每个部分都不是必需的,请将它们标记为可能丢失:
^([0-8]?[0-9]|90)°(\s[0-5]?[0-9]')?(\s[0-5]?[0-9](,[0-9])?")?$

您还可以做其他事情来使它变得更好。但是,这应该可以帮助您入门。

关于regex - 度,分和秒正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18321779/

10-14 20:40
查看更多