regex - Bash 需要测试字母数字字符串

标签 regex string bash if-statement alphanumeric

尝试验证字符串中是否只有小写字母、大写字母或数字。

if ! [[ "$TITLE" =~ ^[a-zA-Z0-9]+$ ]]; then echo "INVALID"; fi

想法?

* 更新 *

变量 TITLE 当前只有大写文本,因此它应该通过并且不应该输出任何内容。但是,如果我向 TITLE 添加特殊字符,IF 语句应该捕获它并回显 INVALID。目前它不起作用。总是回显无效。我认为这是因为我的正则表达式语句是错误的。我认为我的写作方式是寻找一个包含所有这三个内容的标题。

bash 4.2.25

想法是,用户应该能够添加任何标题,只要它只包含大写、小写或数字即可。所有其他字符都应该失败。

* 更新 *

如果 TITLE = ThisIsAValidTitle 它回显无效。

如果 TITLE = ThisIs@@@@@@InvalidTitle 它也回显无效。

* 解决方案 *

很奇怪,当我把它简化成这样的时候它开始工作了:

TEST="Valid0"
if ! [[ "$TEST" =~ [^a-zA-Z0-9] ]]; then
  echo "VALID"
else
  echo "INVALID"
fi

* 真正的解决方案 *

我的变量里面有空格... DUH

不好意思打扰了各位...

* 最终解决方案 *

这说明了标题中的空格

if ! [[ "$TITLE" =~ [^a-zA-Z0-9\ ] ]]; then
  echo "VALID"
else
  echo "INVALID"
fi

最佳答案

我会颠倒逻辑。测试无效字符并在至少存在一个时回显警告:

if [[ "$TITLE" =~ [^a-zA-Z0-9] ]]; then
  echo "INVALID"
fi

话虽如此,您的原始检查对我有用,因此您可能需要提供更多上下文(即脚本的较大部分)。

关于regex - Bash 需要测试字母数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18041761/

相关文章:

java - 为什么空格在该分割指令中显示为子字符串?

ruby - 模式匹配时 =~ 和 match() 有什么区别?

Java正则表达式用特殊字符替换字符串

c - 第一个索引中的元素的行为与其他元素不同

regex - 将目录更改为名称采用正则表达式表示法的文件夹

javascript - 如何在 JavaScript 中使用支持 Unicode 的正则表达式?

c++ - 更快地解析代码文件

r - 将双字字符串中两个单词的第一个字母大写

python - P7zip 阻止 CLI 提示

linux - 如何将命令后面的文本分配给 bash 中的变量