django正则表达式只匹配字母数字而不是下划线

时间:2016-07-07 17:20:47

标签: python regex django

我有一个模型字段,我希望用户只输入字母数字字符。 我设置了正则表达式:

validators.RegexValidator(r'^[\w]+$'

它还需_,但我只想aplha numeric characters而不是_。 什么可能是它的正则表达式?

3 个答案:

答案 0 :(得分:2)

我们通常使用一个简单的[A-Za-z0-9]正则表达式,它基本上是\w但没有下划线(假设您没有设置任何特定的语言环境或unicode标志):

  

\w

     

如果未指定LOCALEUNICODE标志,则匹配任何标志   字母数字字符和下划线; 这相当于   设置[a-zA-Z0-9_] 。使用LOCALE,它将匹配集合[0-9_]加上   任何字符都被定义为当前的字母数字   语言环境。如果设置了UNICODE,则会匹配字符[0-9_]加上   在Unicode字符中被分类为字母数字的任何内容   属性数据库。

另请参阅Regular Expressions: How to Express \w Without Underscore了解其他选项。

答案 1 :(得分:2)

要禁止使用_的{​​{1}},您可以在negated character class中使用相反的班级\w非单词速记字符类)并通过将\W添加到否定字符类中来排除_

r'^[^\W_]+$'
    ^^^^

此模式匹配字符串的开头(^),非字字符以外的一个或多个字符(=匹配所有字符字符)而不是_(所有这些都是{{} 1}}但不包括\w),然后是字符串的结尾。

或者(如果您只使用ASCII)只需使用

_

r'(?i)^[a-z0-9]+$' = \w没有[a-zA-Z0-9_]标记。

由于不区分大小写的内联修饰符re.UNICODE(?i)^[a-z0-9]+$会匹配小写和大写ASCII字母。

答案 2 :(得分:0)

您可以使用此正则表达式:

[A-Za-z0-9]+

如果你不想要大写避免A-Z