există funcția is_upper în Perl, deci cum putem verifica dacă un șir conține numai caractere majuscule?
lucrul simplu este să-l comparăm cu versiunea cu majuscule a lui însuși:
if ($str eq uc $str) { print "All the characters are upper case\n";}
dar acest lucru va spune, de asemenea, că „123” noi toți cu majuscule.
uneori, acest lucru nu este ceea ce ai nevoie.
cel puțin o literă majusculă
pe lângă verificarea dacă versiunea cu majuscule a șirului este egală cu ea însăși,am putea dori să ne asigurăm că există cel puțin o literă majusculă.Putem folosi un regex:
if ($str =~ //) { print "There is an upper case letter\n";}
acesta va funcționa cu ABC-ul Latin, dar nu se va potrivi cu caractere cum ar fi zecimalul (versiunile cu majuscule ale lui zecimal) din ABC-ul maghiar,nici cu alte caractere ciudate, cum ar fi umlaut-ul (versiunea cu majuscule a lui centimetrul).
cel puțin o literă majusculă Unicode
Pentru că există \p{majuscule} care se va potrivi exact cu un caracter caseUnicode superior. Astfel se va potrivi oricare dintre aceste:ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ
if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}
Toate caracterele sunt majuscule Unicode scrisori
S-ar putea să nu fie suficient pentru a avea o literă.Este posibil să aveți nevoie să le aveți pe toate:în acest caz, putem folosi ^ și $ Regex anchorspentru a se potrivi cu începutul și, respectiv, cu sfârșitul șirului.
de asemenea, aplicăm cuantificatorul + care înseamnă 1 sau mai multe dintre lucrurile premergătoare. În cazul nostru, unul sau mai multe caractere cu majuscule precedente.
if ($str =~ /^\p{Uppercase}+$/) { print "There is an upper case Unicode letter\n";}
toate caracterele sunt litere majuscule Unicode sau spațiu
desigur, este rar ca un șir să fie format doar din litere mari.uneori vrem să permitem și alte personaje. De exemplu, am dori să permitemspații, de asemenea. În acest caz, vom crea o clasă de caractere (în paranteze pătrate), care este construit dintr-un spațiu și clasa de caractere reprezentând toate literele mari din lume: .
if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}
încercând exemplele
când încercăm exemplul, putem citi șirurile dintr-un file.In în acest caz, probabil că vom dorideschideți fișierul folosind steagul UTF-8 activat:
open(my $fh, '<:encoding(UTF-8)', $filename)
Pe de altă parte, dacă șirurile care trebuie comparate sunt în cod,trebuie să adăugați utilizarea utf8; la începutul scriptului.
în ambele cazuri se recomandă modificarea canalelor de ieșire standard pentru a utiliza utf-8 cu următoarele:
use open ':std', ':encoding(utf8)';
încercați acest exemplu:
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"; }}