2013-11-18 9 views

ответ

3

Это как и ожидалось. Вы указали 0 или более раз (*) цифру ([0-9]). Пустая строка в 0 раз.
Используйте + (что означает «1 или более раз») вместо *:

if [[ " " =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi; // Should echo No 
if [[ "" =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi; // Should echo No 
+0

Спасибо Я совершенно забыл об этих основах. – JorgeeFG

2

Первый - это пробел, который не соответствует регулярному выражению [0-9]*.

Второй номер пуст, который является [0-9]*, потому что * также подразумевает 0 валютных курсов. Если вы сделаете это соответствует по крайней мере один ocurrency с +, то это неверно:

$ if [[ " " =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi; 
no 
2

* в регулярном выражении означает «0 или более», так что ничего в целевой строке, регулярное выражение соответствует тривиальным.

2

[0-9]* соответствует ноль или более цифр, поэтому да, он соответствует пустой строке. Если вы не хотите соответствовать пустой строке, используйте [0-9]+, который соответствует одному или более цифрам.

Смежные вопросы