gpt4 book ai didi

python - Django 查菲尔德正则表达式

转载 作者:行者123 更新时间:2023-12-01 06:59:04 24 4
gpt4 key购买 nike

考虑 Charfieldmax_length5

我想输入hoursminutes在这个CharField喜欢 HH:MM .

我不想使用models.TimeField因为它存储的是时间,而不是小时数和分钟数。我希望我的 CharField 保持不变,

示例:

8:45 (8hrs and 45minutes) which is why I want to add a regex validator that makes sure that the number before the colon : is less than 24 and the number after it less than 60.

我该如何在正则表达式中做到这一点?

感谢您的宝贵时间。

最佳答案

其正则表达式为:

^(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
  • ^ 匹配输入的开头
  • 0?[0-9] 匹配 0(可选)后跟 09 之间的任意数字>
  • 1[0-9] 表示 1 后跟 09 之间的任意数字
  • 2[0-3] 匹配 2 后跟 03 之间的任何数字(因此我们20-23之间的匹配)
  • 以上三种模式是OR-ed (|),因此它们中的任何一个都会匹配
  • 然后 : 匹配文字 :
  • [0-5][0-9] 匹配 05 之间的任何数字,后跟 之间的任何数字09(这将匹配分钟 00-59)
  • $ 匹配输入的结尾
<小时/>

但是你应该做什么:

  • 通过继承django.core.validators.BaseValidator创建一个新的验证器
  • 覆盖 __call__ 方法,并使用 str.partitionint 转换进行验证。

一个例子:

from django.core.validators import BaseValidator

class HourMinuteDurationValidator(BaseValidator):
message = 'Some message'

def __call__(self, value):
cleaned_value = self.clean(value)
hour, minute = cleaned_value.partition(':')

try:
hour, minute = int(hour), int(minute)
except (TypeError, ValueError):
raise ValidationError(self.message)

if not (
(0 <= hour <= 23) and (0 <= minute <= 59)
):
raise ValidationError(self.message)
<小时/>

如果您坚持使用正则表达式,则可以将给定的正则表达式模式与django.core.validators.RegexValidator一起使用。

关于python - Django 查菲尔德正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58711501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com