Hogyan ellenőrizhető, hogy egy karakterlánc minden nagybetűs (kisbetűs) karakter?

van függvény is_upper a Perl-ben, tehát hogyan ellenőrizhetjük, hogy egy karakterlánc csak nagybetűket tartalmaz-e?

az egyszerű dolog az, hogy összehasonlítsuk önmagának nagybetűs változatával:

if ($str eq uc $str) { print "All the characters are upper case\n";}

de ez azt is mondja, hogy “123” mindannyian nagybetűket használunk.

néha ez nem az, amire szüksége van.

legalább egy nagybetűs

amellett,hogy ellenőrizzük, hogy a karakterlánc nagybetűs változata megegyezik-e önmagával, érdemes megbizonyosodnunk arról, hogy van-e legalább egy nagybetűs betű.Használhatunk regexet:

if ($str =~ //) { print "There is an upper case letter\n";}

Ez működni fog a Latin ABC-vel, de nem egyezik meg a magyar ABC-ből származó olyan karakterekkel,mint pl. a magyar ABC-ből származó, a magyar ABC-ből származó, vagy más furcsa karakterekkel, mint például az umlaut (a nagybetűs változat).

legalább egy nagybetűs Unicode betű

ehhez van \p{nagybetűs}, amely pontosan megfelel egy felső caseUnicode karakternek. Így fog egyezni minden ilyen:ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ

if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}

Minden karakter nagybetűs Unicode betűk

lehet, Hogy nem elég, hogy van egy felső esetben a levelet.Lehet, hogy mindegyikre szükség van:ebben az esetben használhatjuk a ^ és a $ regex horgonyokat, hogy megfeleljenek a karakterlánc kezdetének és végének.

a + kvantort is alkalmazzuk, ami azt jelenti, hogy 1 vagy több az előző dolog. Esetünkben az előző nagybetűs karakter közül egy vagy több.

if ($str =~ /^\p{Uppercase}+$/) { print "There is an upper case Unicode letter\n";}

az összes karakter nagybetűs Unicode betű vagy szóköz

természetesen ritka, hogy egy karakterlánc csak nagybetűk.néha azt is szeretnénk, hogy más karakterek. Például szeretnénk engedélyezni a tereket is. Ebben az esetben létrehozunk egy karakterosztályt (szögletes zárójelben), amely egy szóközből épül fel, és a világ összes nagybetűjét képviselő karakterosztályt: .

if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}

A példák kipróbálása

a példa kipróbálása során akár a file.In ebben az esetben valószínűleg szeretnénknyissa meg a fájlt az UTF-8 zászló használatával:

open(my $fh, '<:encoding(UTF-8)', $filename)

másrészt, ha az összehasonlítandó karakterláncok a kódban vannak,hozzá kell adni az UTF8; használatát a szkript elejéhez.

mindkét esetben javasolt az UTF-8 szabványos kimeneti csatornáinak módosítása a következőkkel:

use open ':std', ':encoding(utf8)';

próbáld ki ezt a példát:

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"; }} 

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.