我需要用RegEx验证一个性别的值,例如:24°12'55,4"或32°24'15,4".
现在,我有下一个RegEx,它与学位和分钟成功匹配:
^([0-8][0-9]|[9][0])°\s([0-4][0-9]|[5][9])'$
Run Code Online (Sandbox Code Playgroud)
但是,当添加秒验证器时出现问题:
^([0-8][0-9]|[9][0])°\s([0-4][0-9]|[5][9])'\s([0-4][0-9]|[5][9],[0-9])''$
Run Code Online (Sandbox Code Playgroud)
我是RegEx的新手,有什么想法吗?
Omn*_*ity 10
首先,你有一些冗余:
^([0-8][0-9]|[9][0])°\s([0-4][0-9]|[5][9])'$
Run Code Online (Sandbox Code Playgroud)
可以成为:
^([0-8][0-9]|90)°\s([0-4][0-9]|59)'$
Run Code Online (Sandbox Code Playgroud)
接下来你有一个逻辑问题,在你的第二场比赛中,你匹配0-4然后0-9(即00-49),然后匹配59.你可以改为:
^([0-8][0-9]|90)°\s[0-5][0-9]'$
Run Code Online (Sandbox Code Playgroud)
匹配00-59
接下来让我们来看看你的秒修改:
\s([0-4][0-9]|[5][9],[0-9])''$
Run Code Online (Sandbox Code Playgroud)
与以前相同的问题,除了现在你添加了一个小数,但没有添加到|的两边 所以它只会在一方面匹配,如果我们修复这个就像我们修复了最后一个:
^([0-8][0-9]|90)°\s[0-5][0-9]'\s[0-5][0-9],[0-9]''$
Run Code Online (Sandbox Code Playgroud)
接下来你有两个单引号而不是双引号,所以修复:
^([0-8][0-9]|90)°\s([0-5][0-9])'\s[0-5][0-9],[0-9]"$
Run Code Online (Sandbox Code Playgroud)
现在我们需要问问自己,这是强制性的第一个数字吗?可能不是.因此,使用a将其标记为可能丢失?
^([0-8]?[0-9]|90)°\s[0-5]?[0-9]'\s[0-5]?[0-9],[0-9]"$
Run Code Online (Sandbox Code Playgroud)
接下来,是第二个强制性的小数部分?可能不是,所以将其标记为可能缺失:
^([0-8]?[0-9]|90)°\s[0-5]?[0-9]'\s[0-5]?[0-9](,[0-9])?"$
Run Code Online (Sandbox Code Playgroud)
最后,我假设除了学位之外的每个部分都不是必需的,将它们标记为可能缺失:
^([0-8]?[0-9]|90)°(\s[0-5]?[0-9]')?(\s[0-5]?[0-9](,[0-9])?")?$
Run Code Online (Sandbox Code Playgroud)
你还可以采取其他措施来改善这种状况.但是,这应该让你开始.