我有一个模型,其中包含一些字段:
class Book(models.Model):
title = models.CharField(max_length=160, help_text='H1(SEO)',blank=True)
hashtags = models.TextField(blank=True, validators=[validate_hashtags])
#标签输入应类似于:
#sth #sth #sth
事实上,除了最后一个标签之外,每个标签后面都需要有一个空格(最后一个标签后面不需要任何空格)。这是我使用正则表达式的验证器功能
def validate_hashtags(value):
string1 = value.split()
string2 = re.findall("(#\\w+ )", value)
if re.match("^#\\w+$", string1[-1]):
matching_counter = len(string2) + 1
else:
matching_counter = len(string2)
if len(string1) != matching_counter:
raise ValidationError("please enter # in the correct format")
但是它不能正常工作,有人可以帮助我吗?
答案 0 :(得分:0)
您可以使用此正则表达式来验证输入。在这种情况下,不需要拆分。
^(#\w+\s+)+$
#sth #sth #sth - Valid
#sth sth #sth - Invalid
#sth#sth #sth - Invalid
希望它可以解决问题。
答案 1 :(得分:0)
如果最后一个#标签后面没有空格,则可以使用match#标签,后跟1 +个单词字符,然后重复一个匹配一个空格和1 +个单词字符的组。
^#\w+(?: #\w+)*$
说明
^
断言字符串的开头#\w+
匹配#
,然后是1个以上的字符字符(?: #\w+)*
非捕获组,重复0+次空格,#
和1+个单词字符$
声明字符串结尾如果该模式之后可以有1个以上的空格或制表符,则可以重复character class [ \t]+
:
^#\w+(?:[ \t]+#\w+)*$