我使用^[a-zA-Z0-9_-]{6,14}regex作为验证用户名,但我想阻止用户名以数字或所有数字开头,所以在这个regex中需要做什么修改?是吗?

Content of temp.txt

user123
User123
USER
UsEr12345
123456
_12345

grep -w -E -o '^[a-zA-Z0-9_-]{5,14}' temp.txt
user123
User123
USER
UsEr12345
123456
_12345

但我想阻止用户名以数字和所有数字开头。

最佳答案

如果禁止以数字开头的用户名,则也禁止仅由一串数字组成的用户名。不需要处理第二个条件,因为第一个条件阻止了这种情况的发生。所以只要以排除数字(和下划线等)的字符类开头就行了。

^[a-zA-Z][a-zA-Z0-9_-]{5,13}$

在这个模式中,我还锚定到字符串的末尾,因为原来的regexp不需要匹配整个字符串。通过锚定到字符串的开头和结尾,您将强制要求只有您允许的字符可以出现在任何位置。两端的锚也可以防止超过14个字符的字符串被匹配。

10-02 00:30