在我的Django网站中,我允许使用字母数字和/或包含@
_
.
+
-
的用户名。此外,也允许空格。我已经编写了一个简单的正则表达式来确保这一点:'^[\w\s.@+-]+$'
。
这可能是一个显而易见的问题,但如何捕获不传递正则表达式验证的字符?我想在工具提示中向用户显示这些字符。
答案 0 :(得分:1)
您可以使用'[^...]'
表示法来否定字符集'...'
。以下内容将为您提供一组所有不需要的字符:
> name = 'abc%&/()45 -:'
> set(re.findall(r'[^\w\s.@+-]', name))
set(['%', '&', ')', '(', '/', ':'])
答案 1 :(得分:1)
使用方括号内的克拉(例如[^...]
)使其成为反转。因此,例如,[A-Za-z0-9_]
将匹配字母数字和下划线,而[^A-Za-z0-9_]
将匹配不字母数字或下划线的任何内容。在您的情况下,您似乎想要的正则表达式是r'^[^\w\s\.\@\+\-]+$'
。