Регулярное выражение для широты с необходимыми 6 знаками после запятой - PullRequest
0 голосов
/ 01 июля 2018

Мне нужно регулярное выражение в Java, которое будет проверять, требуется ли для String представления double 6 знаков после запятой. Перед десятичной точкой значение может быть положительным или отрицательным.

1.123456 - correct
-123123123.123456 - correct
123123123.123456 - correct
-123123123.123456 - correct

1.12345 - wrong
-.123456 - wrong
.123456 - wrong
.12345 - wrong
123456 - wrong

Я пытался:

^\s*(?=.*[1-9])\d*(\.\d{6})?\s*$

но оно не охватывает все края.

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

Попробуйте это:

^\s*(-|\+)?(0|[1-9]\d*)\.\d{6}\s*$

См. демоверсия .

Это позволяет первым цифрам быть нулем , только если это единственная цифра перед точкой, например, 0.123456 в порядке, но не 01.123456. \.\d{6} требует ровно 6 десятичных знаков.

0 голосов
/ 02 июля 2018

В вашем регулярном выражении положительный взгляд (?=.*[1-9]) утверждает, что то, что находится справа, должно содержать цифру, которая будет успешной для всех примеров. После этого утверждения вы сопоставляете ноль или более цифр \d*, за которыми следует часть, которая может совпадать с точкой, и 6 цифр (\.\d{6})?, поэтому это будет соответствовать .588888 или 1.

Если вы хотите сопоставить дополнительный знак минус, вы можете использовать -?

В качестве примера вы можете использовать:

^-?\d+\.\d{6}$

На Java:

String regex = "^-?\\d+\\.\\d{6}$";

Объяснение

  • ^ Утверждение начала строки
  • -? Соответствует дополнительному знаку минус
  • \d+\.\d{6} Совпадение одной или нескольких цифр, точки и 6 цифр
  • $ Утверждение конца строки

Демо

0 голосов
/ 01 июля 2018

Действительный ввод должен

  • начать с необязательных пробелов ---> ^\s*
  • затем необязательно - или + ---> (-|\+)?
  • затем одна или несколько цифр ---> \d+
  • затем одна точка ---> .
  • затем шесть цифр ---> (\d{6})
  • заканчивается дополнительными пробелами ---> ^\s*

Попробуйте это:

^\s*(-|\+)?\d+\.(\d{6})\s*$
...