我正在尝试在Perl中制作GPA验证正则表达式,我的逻辑似乎有些问题。你应该能够结束一个0-3的数字,然后是a。在0-9范围内增加1位数。或者,如果第一个数字是4,则必须跟随.0这是我的代码:
$get_gpa_input =~ m/[0-3]\.\d[0-9]|[4].[0]/
答案 0 :(得分:3)
m/(?: [0-3] [.] [0-9] ) | 4[.]0 /x
答案 1 :(得分:1)
删除[0-9]
。你还有一些额外的括号,你应该在'4.0'中转义小数。
$get_gpa_input =~ m/[0-3]\.\d|4\.0/
答案 2 :(得分:1)
如果您正在进行验证,则不希望在字符串中搜索,而是强制整个字符串与正则表达式匹配;你通过在开头和结尾添加锚来做到这一点:
/\A (?: [0-3]\.[0-9] | 4\.0 ) \z/x
\A
仅在字符串的第一个字符之前匹配,\z
仅匹配字符串的最后一个字符。
避免在大多数代码中使用\d
,因为它可以匹配任何数量的非0到9的Unicode“数字”(尽管在较新的perls中,/ a标志将其恢复为旧的ASCII含义)。
答案 3 :(得分:0)
你有\d[0-9]
,在0-3之后需要两个数字。您也不会在4替换中转义小数,这可能会有所不同。
[0-3]\.\d|4\.0