读取-p正则表达式验证

时间:2018-09-26 12:14:57

标签: bash

我正在尝试添加正则表达式验证以读取-p,例如域名。

当前代码:

read -p "Do Something": dosomething
echo working on $dosomething

感谢您提供每个验证邮件的更新,我试图找出是否有可能对read -p进行正则表达式验证。

2 个答案:

答案 0 :(得分:1)

使用循环:

email=""
until [[ $email =~ $regex ]] ; do
    read -p 'Enter your email: ' email
done

正则表达式

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
不幸的是,在EmailRegex.com上显示的

不兼容bash。

答案 1 :(得分:0)

简短的回答:可以肯定的是,read可以做假设的事情。但是bash的{​​{1}}的实现没有此功能,而且我不知道有任何与POSIX兼容的外壳,并且POSIX本身不包含此功能,尽管看起来像如果需要,实现可以添加为扩展的种类。如果您足够喜欢此功能,请考虑向read提交补丁以添加它!

使用bash进行验证很容易:只需使用循环读取一个值,检查它是否有效,否则请重试。如果您需要定期执行此操作,则可以将其编写为bash函数。