Точное выражение Regex для числа с плавающей точкой не работает - PullRequest
1 голос
/ 14 апреля 2020

Точное выражение регулярного выражения для числа с плавающей запятой не работает, и оно выполняет как целое число, так и число с плавающей запятой. Оно не должно работать, если заданный ввод не имеет десятичной запятой. Пожалуйста, помогите мне

#!/bin/bash
echo "Enter version code" 
read versionName
if ! [[ "$versionName" =~ ^[+-]?[0-9]+\.?[0-9]*$ ]]; then
echo "Sorry decimal numbers only"
echo "$versionName"
else
sudo  sed 's/\(versionName[[:space:]]*\)"[0-9.]*"/\1"'"${versionName}"'"/' test.txt
fi

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

В вашем начальном регулярном выражении ^[+-]?[0-9]+\.?[0-9]*$ '?' за '.' делает так, чтобы регулярное выражение принимало ноль или 1 точку. То, что вы хотите: ^[+-]?[0-9]+\.[0-9]+$ Обратите внимание на '+' в конце этого регулярного выражения, которое также заставляет 1 или более di git следовать за точкой. Например "1" не будет принято, но будет принято «1.234».

0 голосов
/ 14 апреля 2020

Используйте это: ^[+-]?[0-9]+\.[0-9]+$

                   ^ no "?" -- making the decimal point compulsory

                          ^ "+" instead of "*" matching one or more, not 0 or more because otherwise "12." would match too (unless you do want it to match too)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...