Проверка десятичного числа в регулярном выражении игнорирует проверку на минус при первом индексе строки

#java #regex

#java #регулярное выражение

Вопрос:

У меня есть следующее регулярное выражение, которое проверяет десятичное число с десятичной точкой.

 REGEX_VALID_DECIMAL_NUMBER = "\d (\.\d )*";
  

Итак, следующие числа действительны в соответствии с шаблоном:

 0
0.0
1.00
etc.
  

Проблема в том, что я хочу расширить свое регулярное выражение так, чтобы оно игнорировало регистр проверки «-» при первом индексе строки — для отрицательных чисел.

 REGEX_VALID_DECIMAL_NUMBER = "[^-\d (\.\d )*]";
  

Я пробовал это, добавив ^-, но это позволит везде «-«:

 -0-
-0.0-
-1.00-
etc.
  

Как я могу добавить эту проверку для всех индексов, кроме первого индекса строки?

Комментарии:

1. Что заставило вас добавить [^ и ] ? Это используется для определения класса _character . Просто добавьте -? в начале вашего выражения, что означает «символ тире / минус ноль раз или единожды». И если вы не используете, String.matches(...) тогда добавьте это ^ , чтобы также соответствовать началу ввода, т. Е. ^-?d ... .

2. "^-?[0-9] (\.[0-9] )*$" не более одного минуса в самом начале

3. Я хотел также создать регулярное выражение, которое также заменит эти недопустимые символы «» пустой строкой, но это другой вопрос.

4. Примечание: попробуйте проверить 1.1.1.1.1 , используя ваше выражение. 🙂 Подсказка: вместо (\.\d )* вы, вероятно, хотите (\.\d )?

5. Что заставляет вас думать, что регулярное выражение является решением для этого? Просто используйте Double.parseDouble и посмотрите, выдает ли это NumberFormatException .

Ответ №1:

Вероятно, вам следует использовать

 ^-?d (.d )*$
  

^-? гарантирует, что отрицательное значение принимается только в начале.

ДЕМОНСТРАЦИЯ