Java - 正则表达式有效条目

时间:2013-04-28 22:20:55

标签: java regex

我正在尝试确定变量degreeOfDifficulty是否为“1.2”和“4.8”(含)之间的数值,并且不接受字符值。所以“1.0”,“4.9”,“a”和“!”无效; “1.2”,“4.8”,“4.0”和“4”有效。到目前为止,我有:

degreeOfDiffString.matches("^[1](\\.[2-9]?)?|^[2-3](\\.[0-9]?)?|[4](\\.[0-8]?)?"))

如果我输入一个角色,是否有我遗漏的东西会导致错误抛出?

4 个答案:

答案 0 :(得分:3)

如果可以避免使用正则表达式,请不要使用正则表达式。您实际上可以解析degreeOfDiffString并获取数值(如果它是数字),然后检查上限和下限(1.2到4.8)。更容易编码和理解正在发生的事情。正则表达式使您的代码容易出错,如果您决定稍后更改边界,则必须重新使用正则表达式。

try
{
    double d = Double.parseDouble(degreeOfDiffString);
    if(d >= 1.2 && d <= 4.8)
    {
        return true; // valid
    }
}
catch(NumberFormatException ex)
{
}
return false; // all other cases -> invalid

答案 1 :(得分:2)

你不需要正则表达式。只需使用Double.parseDouble()解析degreeOfDiffString,然后检查double是否介于1.2和4.8(含)之间。

示例(未经测试,只是我现在输入的内容):

try
{
    String degreeOfDiffString = "3.4";
    double number = Double.parseDouble(degreeOfDiffString);
    if (number < 1.2 || number > 4.8) System.out.println("Invalid difficulty.");
    else
    {
        // Do stuff
    }
} catch (Exception e)
{
    // Handle exception
}

如果字符串中有随机内容,例如“!”或者某个字母,然后应该抛出NumberFormatException,你可以处理。

答案 2 :(得分:0)

模式不正确。

一个狡辩是,当你真的分别是[1][4]时,你会使用14

您必须在模式的开头只放置一个^;其他插入符不正确。此外,Java matches()方法将整个模式与主题相匹配,因此插入符号是多余的。

你有小数点匹配措辞的方式,它将接受第一个数字之后的一段时间以及一个数字之后的句号。这是你想要的吗?

答案 3 :(得分:0)

尝试使用匹配接受号码的模式:

1\\.[2-9]|[23](\\.\\d)?|4(\\.[0-7])?|4\\.8