Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash Regex for empty string returns true

Tags:

regex

bash

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

if [[ "" =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes Yes

Is this a bug or am I missing something?

like image 850
JorgeeFG Avatar asked Jun 21 '26 07:06

JorgeeFG


1 Answers

This is as expected. You specified 0 or more times (*) a digit ([0-9]). An empty string is 0 times that.
Use a + (which means "1 or more times") instead of a *:

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
like image 106
SQB Avatar answered Jun 23 '26 20:06

SQB