Kurso de Raku / Aldono 🆕 / Tipoj kaj tekstmaŝinoj / Regulesprimoj kaj gramatikoj / Exercises / Validigu identigilojn
Solvo: Validigu identigilojn
Jen ebla solvo de la tasko.
Kodo
for <count total2 2fast my-var _hidden> -> $name {
my $ok = $name ~~ / ^ <[A..Za..z_]> <[A..Za..z0..9_]>* $ /;
say "$name: { $ok ?? 'valid' !! 'invalid' }";
}🦋 Vi povas trovi la fontkodon en la dosiero validate-identifier.raku.
Eligo
count: valid
total2: valid
2fast: invalid
my-var: invalid
_hidden: validKomentoj
La ankroj
^kaj$devigas la ŝablonon kovri la tutan ĉenon, do unu sola fremda signo kiel la streketo enmy-varfaras ĝin nevalida.La unua signoklaso permesas literon aŭ substrekon; la dua, ripetata per
*, aldone permesas ciferojn — kongruante precize kun la klasika regulo pri identigiloj.La duan klason oni povas ankaŭ skribi kiel
\w, la enkonstruitan mallongigon por vortsigno (litero, cifero aŭ substreko):my $ok = $name ~~ / ^ <[A..Za..z_]> \w* $ /;
Unu diferenco konsciendas:
\wen Raku estas Unikod-konscia, do nomo kielcaféankaŭ trapasas — kio hazarde kongruas kun Raku mem, kiemy $café = 1;estas tute laŭleĝa. La plene skribita klaso<[A..Za..z0..9_]>tenas la kontrolon strikte ASCII-a.Estas tamen kaptilo: en Raku mem
my-varestas valida identigilo! Raku permesas streketon (aŭ apostrofon, kiel enisn't) ene de nomo, kondiĉe ke ĝin sekvas litero — kaj tial subrutinoj kielis-primelegiĝas tiel nature. Por validigi identigilojn de Raku, permesu tiajn grupojn post la klasika parto:for <count total2 2fast my-var _hidden> -> $name { my $ok = $name ~~ / ^ <[A..Za..z_]> \w* [ '-' <[A..Za..z]> \w* ]* $ /; say "$name: { $ok ?? 'valid' !! 'invalid' }"; }
Ĉiu krampita grupo
[ '-' <[A..Za..z]> \w* ]akceptas streketon nur kiam litero sekvas, domy-varnun estas raportata kiel valida, dum2fast— kaj ĉenoj kiela-aŭa-1— ankoraŭ ne estas.