#javascript #regex #birt
Вопрос:
Я пытаюсь убедиться, что данный параметр Birt содержит ровно один, два или три 4-значных года csv. Так что это было бы хорошо:
2017
2017,2018
=2017
= 2017,2018, = 2019
2019,2020,2021
и это было бы плохо
abc
2019,2018,2017,2016
2019,dddd,2020
Я попробовал это:
if(BirtComp.test(params["Fiscal Year"].value,"^ *?=? *?dddd *?=? *?(, *?=? *?dddd *?=? *?)?(, *?=? *?dddd *?=? *?)?$"))
{
yearsValid=true;
} else {
yearsValid=false;
}
но даже если параметр состоит всего из 4 цифр, таких как 2020, он никогда не сбудется.
Я делаю это в открытом сценарии для набора данных. Похоже, он отлично работает в notepad
В качестве дополнительной точки данных здесь все это не удалось скомпилировать в javascript в Birt, который я попытался поместить в нижней части ОТКРЫТОГО набора данных.. обратите внимание, что «попробуйте это» отлично работало в notepad :
//try this ^=? *d{4}(?:[, =] d{4}){0,2}$
//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,"\d\d" ));
//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/dd/ ));
//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/\d\d/ ));
//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/^=? *d{4}(?:[, =] d{4}){0,2}$/ ));
//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/^=? *\d{4}(?:[, =] \d{4}){0,2}$/ ));
Может кто-нибудь указать, что я делаю не так? Это скорее вопрос о регулярных выражениях javascript Birt, чем вопрос о регулярных выражениях.
Ответ №1:
Вы можете использовать это регулярное выражение для проверки:
^W*d{4}(?:W d{4}){0,2}$
Демонстрация регулярных выражений
Сведения о регулярном выражении:
^
: НачалоW*
: Сопоставьте 0 или более символов, не содержащих слов.d{4}
: Совпадение 4 цифр(?:W d{4}){0,2}
: Сопоставьте от 0 до 2 дополнительных экземпляров 4-значных чисел, разделенных 1 не-словесными символами$
: Конец
Просто основываясь на ваших примерах, это регулярное выражение также может работать для вас:
^=? *d{4}(?:[, =] d{4}){0,2}$
Комментарии:
1. Спасибо — второй сработал превосходно
2. Рад отметить, что это сработало, вы можете отметить ответ как принятый, нажав на галочку в левом верхнем углу ответа