使用正则表达式验证昵称

4
我需要验证一个昵称,不能包含@#,且不能以数字开头。
这是我的解决方案,但是包含了@#
(^[^0-9])([\w a-z A-Z 0-9][^@#])

.测试:

andrea //true
0andrea // false

// these are true but I need them to be false

and@rea // true
and#rea // true
3个回答

6

你的正则表达式:

^(^[^0-9])([\w a-z A-Z 0-9][^@#])$

解释:

  1. 不要以数字开头,可以用任何其他字符开头。

  2. 两个字母的大写/小写、数字或下划线,后面跟着任何一个 ^@# 中的字符。

因此,根据您的正则表达式,任何三个字母的单词都将被匹配。

请使用以下内容:

^[^0-9]\w+$

这将适用于不包含任何特殊字符的用户名。

如果您只是不想使用@和#,请使用以下内容:

^[^0-9][^@#]+$

这里有一个演示:https://regex101.com/r/gV9eO0/1


1
谢谢,您能解释一下为什么第一个表达式需要双重 ^ 吗? - jay
我没有使用双重的 ^。第一个 ^ 是字符串的起始位置。第二个 ^[] 内,表示排除括号内的内容。 - aelor

4

我需要验证昵称,但不能含有@#,且开头不能是数字。

使用(?!pattern)可以实现负向预查,以便防止作为第一个字符的\d,同时不会阻止表达式检查其他字符。

如果你只是想黑名单验证,则

^(?!\d)[^@#]+$

reg1

否则,使用白名单

^(?!\d)[a-zA-z\d ]+$

reg2

请注意,我们一直匹配到字符串的结尾,$。我使用了+,因为您可能不希望允许零长度昵称。
此外,您可以采用在组上使用 *+ 操作符的方式来实现您尝试的方法;
^(?!\d)(?:(?![@#])[a-zA-Z\d ])+$

reg3

Graphical representations via debuggex.com


1
你可以使用类似以下的代码:

^[a-zA-Z]\w*$
  • \w[a-zA-Z0-9_] 的快捷方式,表示字母数字类。
  • [a-zA-Z] 确保第一个字符不是数字(因此您的昵称不能为空)。
  • ^$ 是锚点,匹配字符串的开头和结尾,确保字符串仅包含所需字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接