有效年份范围的正则表达式

时间:2020-05-09 12:25:21

标签: python regex validation datetime plotly-dash

目的:

您好,我正在尝试为dash_core_components.Input“模式”输入属性创建一个正则表达式,以验证年份范围输入。

我有下面的Python v3.6.3代码,该代码提供regexp来验证输入格式(每位有效...):

import datetime as dt

full_year_   = dt.datetime.now().year
mill_        = str(full_year_)[0]
century_     = str(full_year_)[1]
decade_      = str(int(str(full_year_)[2]))
prev_decade_ = str(int(str(full_year_)[2]) - 1)
year_        = str(full_year_)[3]

prior_decades  = f'{mill_}{century_}[0-{prev_decade_}][0-9]'
current_decade = f'{mill_}{century_}{decade_}[0-{year_}]'


def century():
    return f'^({prior_decades})|({current_decade})$'


def century_set():
    # Acceptable Examples: 2018, 2019, 2020 | 2018:2020
    return f'^\s*({prior_decades}|{current_decade})([,\s]+{prior_decades}|[,\s]+{current_decade}|[,\s]*)*$|'\
           f'^\s*({prior_decades}|{current_decade})(\s*:\s*{prior_decades}|\s*:\s*{current_decade}|\s*)?$'

问题陈述:

如果可能的话,我想在century_set()中实现的功能是能够使用正则表达式来验证范围是否有效。

换句话说:

"2018:2020" >> Valid
"2020:2018" >> Invalid

或者...

是否有一种回旋方式来应用其他条件来验证dash_core_components.Input的输入?

1 个答案:

答案 0 :(得分:0)

一个非常简单的解决方法是在回调中包含century_set()

类似这样:

@app.callback(Output('e_msg', 'value'),
              [Input('year_input_box', 'value')]
def validate_yr(year_input):
    error_msg = century_set(year_input) # Modify century_set to take a year as input and after validating, return an error message if not satisfying the regex criteria
    return error_msg

然后使用error_msg作为输入框旁边的文本区域,以显示是否符合正则表达式。

如果regex正确传递了输入,则进一步调整返回值以继续执行程序的其余部分。