2

我正在尝试在 Perl 中制作 GPA 验证正则表达式,但我的逻辑似乎有问题。您应该能够以数字 0-3 结尾,后跟 . 在 0-9 范围内再增加 1 个数字。或者如果第一个数字是 4 它必须跟一个 .0 这是我的代码:

$get_gpa_input =~ m/[0-3]\.\d[0-9]|[4].[0]/
4

4 回答 4

3
m/(?: [0-3] [.] [0-9] ) | 4[.]0 /x
于 2013-04-08T00:11:18.217 回答
1

删除[0-9]. 你还有一些额外的括号,你应该在“4.0”中转义小数点。

$get_gpa_input =~ m/[0-3]\.\d|4\.0/
于 2013-04-08T00:11:41.940 回答
1

如果您正在进行验证,您不想在字符串中搜索,而是强制整个字符串与您的正则表达式匹配;您可以通过在开头和结尾添加锚点来做到这一点:

/\A (?: [0-3]\.[0-9] | 4\.0 ) \z/x

\A仅在字符串的第一个字符之前匹配,仅在字符串\z的最后一个字符之后匹配。

避免\d在大多数代码中使用,因为它可以匹配 0 到 9 以外的任意数量的 Unicode“数字”(尽管在较新的 perls 中,/a 标志将其恢复为旧的 ASCII 含义)。

于 2013-04-08T00:28:40.627 回答
0

\d[0-9]需要在 0-3 之后的两位数您也不会在 4 替代项中转义小数点,这可能会有所不同。

[0-3]\.\d|4\.0
于 2013-04-08T00:11:33.537 回答