Perlissä on funktio is_upper, Joten miten voimme tarkistaa, sisältääkö merkkijono isoja kirjaimia?
yksinkertaista on verrata sitä itsensä suuraakkosiin:
if ($str eq uc $str) { print "All the characters are upper case\n";}
, mutta tämä kertoo myös, että ”123” me kaikki isolla kirjaimella.
joskus tätä ei tarvita.
ainakin yksi iso kirjain
sen lisäksi,että tarkistetaan, onko merkkijonon suuraakkonen sama kuin itse, kannattaa varmistaa, että on ainakin yksi suuraakkonen.Voimme käyttää regex:
if ($str =~ //) { print "There is an upper case letter\n";}
Tämä toimii latinankielisen ABC: n kanssa, mutta ei vastaa Unkarin ABC: n (áéíóööőúüű: n suuraakkoset) merkkejä,eikä muita outoja merkkejä kuten Umlaut Ä (ä: n suuraakkoset).
vähintään yksi suuraakkonen Unicode-kirjain
sillä on \p{suuraakkoset}, joka vastaa täsmälleen yhtä ylempää kaseunicode-merkkiä. Se vastaa siis mitä tahansa näistä: ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUOÚÜŰVWXYZ
if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}
kaikki merkit ovat isoja Unicode-kirjaimia
ei välttämättä riitä, että on yksi suuraakkonen.Saatat tarvita ne kaikki:siinä tapauksessa voimme käyttää ^ ja $ regex anchorsto vastaamaan alussa ja lopussa merkkijono vastaavasti.
käytämme myös + – kvantifioijaa, joka tarkoittaa yhtä tai useampaa thepreceding-asiaa. Meidän tapauksessamme yksi tai useampi edellisen isolla kirjaimella merkki.
if ($str =~ /^\p{Uppercase}+$/) { print "There is an upper case Unicode letter\n";}
kaikki merkit ovat isoja Unicode-kirjaimia tai välilyöntejä
on toki harvinaista, että merkkijono koostuisi vain isoista kirjaimista.joskus haluamme sallia myös muita hahmoja. Haluaisimme esimerkiksi sallia myös tiloja. Tällöin luodaan merkkiluokka (hakasulkeissa), joka on rakennettu tilasta ja merkkiluokasta, joka edustaa kaikkia maailman isoja kirjaimia: .
if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}
Kokeillessamme esimerkkejä
kokeillessamme esimerkkiä voimme joko lukea merkkijonoja a file.In tällöin luultavasti haluamme toopen tiedoston käyttäen UTF-8 lippu käytössä:
open(my $fh, '<:encoding(UTF-8)', $filename)
toisaalta, jos verrattavat merkkijonot ovat koodissa,on lisättävä käytä utf8; skriptin alkuun.
kummassakin tapauksessa on suositeltavaa muuttaa standardilähtökanavia utf-8: n käyttöön seuraavasti:
use open ':std', ':encoding(utf8)';
kokeile tätä esimerkkiä:
use strict;use warnings;use 5.010;use utf8;use open ':std', ':encoding(utf8)';foreach my $str ("1", "ä", "äÄ", " Ä", "X", "Á", "É", "Í", "Ö", "Ő", "Ú", "Ü") { if ($str =~ /^+$/) { say $str; } else { say "no $str"; }}