在bash中使用正则表达式验证输入

时间:2013-01-20 23:02:17

标签: regex bash awk

我使用http://www.regular-expressions.info/examples.html中的示例来验证以下代码

while [[ ! $name =~ ^[a-Z][ \t][a-Z]. ]]; do

                echo "Please enter your Firstname and Surname e.g Joe Bloggs"                           # (a)Ask for NAME,TELEPHONE NUMBER,DOB #
                read name
                echo
        done

我非常希望确保用户输入带有空格的第一个和第二个名称,我们将非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

你的正则表达式有几个问题:

  • 您正在检查a(小写)和Z(大写)之间的字符。这不符合您的预期,使用[A-Za-z]检查大写和小写字母。
  • 你缺少重复的字符;使用+匹配一个或多个字符。
  • 匹配结束时应为$,而非.(与任何单个字符匹配)。

试试这个:

^[A-Za-z]+[\ \t][A-Za-z]+$

如果您想验证可以使用的大写的名字和姓氏:

^[A-Z][a-z]+[\ \t][A-Z][a-z]+$

但这不适用于像Marty McFly这样不遵循该规则的名称。