正则表达式检查加号和数字

时间:2018-12-03 16:17:36

标签: java regex

我要检查仅包含数字和数字的字符串:

public boolean checkPhoneNumberIsValid(String arg) {
    return Pattern.compile("\\+[0-9]").matcher(arg).find();
}

当我尝试“ xxx”时,此操作将失败。当我尝试“ +3531234567”时,它正确通过了。但是,当我尝试“ + 35312ccc34567”时,错误地通过了。为什么会这样?

2 个答案:

答案 0 :(得分:1)

我认为是因为find方法在您的参数中找到单个子字符串匹配项。我建议使用matches方法来检查完整的字符串是否匹配:

public boolean checkPhoneNumberIsValid(String arg) {
    return Pattern.matches("\\+[0-9]+", arg);
}

[0-9]+表示一个或多个数字。您错过了+,因此您只能使用find方法在字符串的开头匹配一个数字。

您还可以看到Pattern.matches方法here

但是,如果您确实要使用find方法,则必须对正则表达式使用"\\+[0-9]+$"来强制find方法匹配完整的字符串。 $表示字符串的结尾必须在此处。

另外,如果您打算经常调用checkPhoneNumberIsValid,则应预先编译正则表达式,因为它更有效,如here所述:

private static final Pattern PHONE_NUMBER_REGEX = Pattern.compile("\\+[0-9]+");

public boolean checkPhoneNumberIsValid(String arg) {
    return PHONE_NUMBER_REGEX.matcher(arg).matches();
}

答案 1 :(得分:1)

传递不正确的原因是因为您仅匹配+之后的一位数字。您需要将整个字符串匹配到最后并检查它是否只有数字。尝试使用以下正则表达式:

\\+[0-9]+$

\\+\d+$
正则表达式末尾的

+表示:Match one or more occurrence of [0-9]

查看此内容:https://regex101.com/r/0ufZPi/1

+3245edsfv    //fail
+86569653386  //pass
+xxxx         //fail
+234fsvfb7890 //fail