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