Как правильно настроить синтаксис соответствия регулярных выражений BIRT

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