Регулярное выражение для допустимого диапазона лет - PullRequest
0 голосов
/ 09 мая 2020

Цель:

Привет, я пытаюсь создать регулярное выражение для свойства ввода 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" >> Valid<br />"2020:2018" >> Invalid

Или ...

Есть ли обходной способ применить дополнительные критерии для проверки ввода для dash_core_components.Input?

1 Ответ

0 голосов
/ 12 мая 2020

Очень простой обходной путь может заключаться в использовании 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 в качестве текстовой области рядом с полем ввода, чтобы отобразить, если это не соответствует регулярному выражению.

Дальнейшая настройка возврата к go перед остальной частью программы, если регулярное выражение передает ввод правильно.

...