I want to use regex
for checking only three allowed characters: "[0-9]
" and ".
" and "/
".
Note: The test case is an ipv4/ipv6
address but I don't want to check the number in the range [0-255]
, I only want to check allowed characters in the input variable.
I use "|
" as the "or
" expression, and combine all the three allowed characters with "|
", and finally add "+
" in the last for make sure at less one allowed character must exist in the input variable.
Here is the test bash script:
test_ipv4_address="127.0.0.1/24"
test_wrong_ipv4_address="127.0.0.1#24"
test_ipv6_address="::1/128"
allowed_characters='([0-9]|\.|\/)+'
[[ "$test_ipv4_address" =~ $allowed_characters ]] && echo "yes, $test_ipv4_address is allowed"
[[ "$test_wrong_ipv4_address" =~ $allowed_characters ]] && echo "yes, $test_wrong_ipv4_address is allowed"
[[ "$test_ipv6_address" =~ $allowed_characters ]] && echo "yes, $test_ipv6_address is allowed"
Here is the output:
yes, 127.0.0.1/24 is allowed
yes, 127.0.0.1#24 is allowed
yes, ::1/128 is allowed
Here is the expected output:
yes, 127.0.0.1/24 is allowed
What's wrong in my regex? And how to fix?