仅接受字母数字,破折号和点

时间:2019-02-07 10:01:31

标签: regex bash shell

我做了一个正则表达式,只允许使用字母数字,点和破折号。 我制作了看起来正常的正则表达式^[a-zA-Z0-9\-.]+$https://regex101.com/r/9Zrcsp/1

但是,如果我尝试在bash脚本中使用它,则突然无法正常工作。

#!/bin/bash
STR="test"
REGEX="^[a-zA-Z0-9\-.]+$"

if [[ "$STR" =~ $REGEX ]]; then
    echo "OK"
else
    echo "NOK"
fi

每次NOK都应该返回OK

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

尽可能小的更改只是将_移动到末尾,因此将其视为文字,而不是使用-和{{ 1}}:

\

也就是说,.是不可靠的,不应使用(其行为会根据当前语言环境而变化)。改用字符类:

REGEX="^[a-zA-Z0-9.-]+$"

...类似,a-zA-ZREGEX='^[[:alnum:].-]+$' 相比更可靠,而[[:upper:]][A-Z]的更可靠替代。