首页 > 解决方案 > 有效年份范围的正则表达式

问题描述

目的:

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

我有以下 Python v3.6.3 代码,它提供了用于验证输入格式的正则表达式(对我来说有效......):

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" >> 有效
"2020:2018" >> 无效

或者...

是否有一种迂回的方法来应用额外的标准来验证输入dash_core_components.Input

标签: pythonregexvalidationdatetimeplotly-dash

解决方案


一个非常简单的解决方法可能是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用作输入框旁边的文本区域以显示是否不符合正则表达式。

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


推荐阅读