Diskuze: Porovnání stringu s polem stringů s proměnnou
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Toto by se dalo udělat přes Regex.
https://www.itnetwork.cz/…vyrazy-regex
Aktuálně nemůžu poskytnou kód ale snad jsem tě alespoň nasměroval
Děkuji za komentář. O existenci Regex vím, ale pro mě dost nepřehledný a nemám v něm prakticky žádnou praxi.
Ako už písal Jakub Hýža , regex velmi pomôže
Ak nechceš používať regex , tak som vytvoril funkciu , ktorá to
testuje
Použil som string.split() a testpval som potom polia
var forbiddenRequests = [
"/account/notifications/mark-as-read",
"/user/*/send-message",
];
function include(testURL){
splitedURL = testURL.split("/"); // rozdelíme si testovanú URL podlá lomítka "/"
// tento cyklus prejde cez pole zakázaných URL
for(i of forbiddenRequests){
isIncluded = 1; // pri každej zakázanej URL si nastavíme premennú na 1 - budeme ju potrebovať
TMP = i.split("/"); // každú zakázanú URL rozdelí podľa lomítka "/"
// Ak sa nerovná dĺžka testovanej a zakázanej URL , tak nemá zmysel testovať , určite sa nerovnajú
if(TMP.length != splitedURL.length){
continue; // preskočime a ideme na ďalšiu zakazanú URL
};
//Prejdeme teraz cez obidve premenné
for(i = 0;i<TMP.length;i++){
// ak je v zakazanej premennej hviezdička , nemá zmysel testovať rovnosť , pretože namiesto hviezdičky ide všetko
if(TMP[i]=="*"){
continue;
};
// testujeme či sa výrazy nerovnajú
// ak sa nerovnajú , nastavíme premennú isIncluded na 0 a vyskočíme z cyklu
if(TMP[i]!=splitedURL[i]){
isIncluded = 0;
break;
};
// testujeme či je premenná isIncluded nastavená
// ak je nastavená na 0 = niečo je počas testu zmenilo , a kedže jediné čo tu premennú mení je nezhoda medzi zakazanou a testovanou URL, pokračujeme ďalej
// ak je nastavená na = nič ju nezmenilo , to znamená , že testovaná a zakazaná URL su rovnaké - vrátime true
if(isIncluded == 1){
return true;
};
};
};
// ak sa dostaneme sem , znamená to , že žiadna zakázaná URL nebola rovnaká ako testovaná - vrátime false
return false;
};
Samozrejme je to len model
Tvojou úlohou je to zabaliť do triedy aby si to mohlo používať kde
chceš
Dôvod prečo som to neurobil ja je v tom , že ty potrebuješ riešenie a podla
toho si tu triedu aj upravíš
Dúfam že som pomohol
Teraz som si všimol že nepoúživaš čistý JavaScript , ale
Typescript
Dúfam že to nevadí
Regexp v js resi presne to, co chces.
http://www.regexp.cz/
^aaa - string zacina aaa "aaa" "aaab" "aaaxyz123"
bbb$ - string konci bbb "bbb" "xzy123bbb"
Dale pak mas seznamy znaku
[a] = a
[a-z] = a nebo b nebo c nebo...
[A-Z]
[0-9]
[ar4] = [4ra] = 4 nebo r nebo a
a[abc]x = aax nebo abx nebo acx
Opakovani
? = 1
* = 0-nekonecno
{min} {min,max}
{3} 3x
{3\} 3 az nekonecno
{3,5} az 5
Pr:
aaa = a{1,3} = 'a' 1x az 3x
aaa = a{3}
aaa = a+ = 'a' 1x a vickrat
aaa = a* = 'a' vubec nebo vicekrat
aaa = [a]+ seznam znaku, kde je aspon jedno 'a' a opakovani
aaa = [abcd]+ seznam znaku, kde je aspon jedno 'a' a opakovani
aaa = a[abcd]+ retezez zacina 'a', za nim nasleduje cokoliv ze seznamu, kde je
aspon jedno 'a', takze to plati i
aaa, aa, ab, ac, ad, aaab, abab ,...
"/account/notifications/mark-as-read",
"/user/*/send-message",
new RegExp("[/]account[/]notifications[/]mark-as-read",'') nebo /\/account\/notifications\/mark-as-read/ nebo /[/]account[/]notifications[/]mark-as-read/
new RegExp("^[/]account[/]notifications[/]mark-as-read$",'')
new RegExp("^[/]user[/].*[/]send-message$", ''),
new RegExp("[/]user[/].*?[/]send-message", ''),
cili string zacina [/]user[/], pak jakykoliv znak (.) v jakemkoliv mnozstvi
(), a konci to [/]send-message
nebo
ve string kdekoliv od zacatku je [/]user[/], pak jakykoliv znak (.) v jakemkoliv
mnozstvi () dokud nenarazis (?), na retezec [/]send-message a za nim muze
byt take cokoliv, protoze tam neni $ pro ukonceni
.*? = to je takova divoka trojkombinace, kde ? znamena neco jineho nez jsem psal
vys, ale je to popsano na te strance
[/] = lomitko se pouziva pro ohraniceni zacatku a konce, proto by melo byt
zalomitkovane nebo jako vycet znaku \/ nebo [/]
[/]user[/].*?[/]send-message
plati pro
/user/ahoj/send-message
XYZ/user/ahoj/send-message
XYZ/user/ahoj/send-messageUVW
/user/ahoj/send-messageUVW
^[/]user[/].*?[/]send-message$
^[/]user[/].*[/]send-message$
To by melo byt stejne, protoze pokazde vyzadujes zacatek a konec, takze by tam ?
nemel mit vyznam
Zkratka, regularnimi vyrazy hledas ve stringu nejakou cast podle pravidla, ktere si napises. Neni to tak slozite, jak se zda. jen to ma divoky zapis.
oprava, tady to mrsi texty
{3\} 3 az nekonecno
{3,} 3 az nekonecno - spravne
\+ 1 az nekonecno, samotne plus bez lomitka (nepochopitelne z + udelal odrazku,
kdyz odrazka je *)
Zobrazeno 8 zpráv z 8.