- ID検索用のINPUTを作成する際、「123」「1-100」「1,3,45」などで1つ、連続、複数で検索したかった
- 最初はisdigit()などで組んでみたものの条件が複雑になりすぎた
- よって正規表現でそれ以外の文字が含まれればNGとしてみた
- ただし、桁数の正誤は判断できないため、メイン側で判別が必要
a_dict = dict(
ok_chr1 = '345',
ok_chr1_random_sorted = '1,3,5,100,600',
ok_chr1_random_no_soretd = '4,1,89,2',
ok_chr1_random_same = '1,5,3,5,9',
ok_chr2 = '345-340',
ok_chr2_same = '235-235',
ok_chr3_mixed = '110-109,345',
ng_chr1 = '235',
ng_chr2 = '231a',
ng_chr3 = '23あああ',
ng_chr4 = '234ー236',
ng_chr5 = '235-256',
ng_chr6_reverse = '110-109',
ng_chr7_space = '110 ',
ng_chr8_space = '110, 100',
)
def is_correct_chr_in_set_id(regex_p, chrs):
chrs = str(chrs)
split_string_list = []
for s in [s for s in list(chrs)]:
is_correct_chr = regex_p.search(s)
split_string_list.append(is_correct_chr)
return all(split_string_list)
# 任意の非数字とマッチ
p = re.compile(r"[0-9]|-|,")
for chrs in a_dict.values():
is_correct = is_correct_chr_in_set_id(p, chrs)
print(f'{chrs}: {is_correct}')
>> 345: True
>> 1,3,5,100,600: True
>> 4,1,89,2: True
>> 1,5,3,5,9: True
>> 345-340: True
>> 235-235: True
>> 110-109,345: True
>> 235: False
>> 231a: False
>> 23あああ: False
>> 234ー236: False
>> 235-256: False
>> 110-109: True
>> 110 : False
>> 110, 100: False