Проверка регулярного выражения, если строка содержит только цифры, не работает

1

Это мой код, и я понятия не имею, почему он возвращает false

    "A123".matches("\\D+");
Теги:

3 ответа

1
Лучший ответ

Это потому, что вы еще одна жертва среди десятков/сотен разработчиков Java, которые ежедневно .matches() из-за того, что .matches() неправильно.

Он попытается сопоставить весь ввод. Это не то, что вы хотите.

Вы должны пройти через Pattern, Matcher и .find() вместо:

private static final Pattern NONDIGIT = Pattern.compile("\\D");

// Test whether there is any nondigit character in a string:
NONDIGIT.matcher(theString).find();

Особенно это следует делать, поскольку в любом случае .matches() будет перекомпилировать Pattern каждый раз; здесь у вас есть только один Pattern.

3

Это должно быть:

"A123".matches("^\\d+$");

нижний регистр d обозначает цифру ^ для начала строки и ^ для конца строки.

  • 2
    Нет необходимости в якорях; посмотри на мой ответ
1

Вы можете попробовать следующее:

"A123".matches("[0-9]+") 

Также, как вы отметили его как Java, существует альтернативный способ использования NumberUtil.isNumber(String str) из Apache, который может проверить это для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню