Il y a une fonction is_upper en Perl, alors comment vérifier si une chaîne ne contient que des caractères majuscules?
La chose simple est de la comparer à la version en majuscules de lui-même:
if ($str eq uc $str) { print "All the characters are upper case\n";}
mais cela dira aussi que « 123 » nous sommes tous en majuscules.
Parfois, ce n’est pas ce dont vous avez besoin.
Au moins une lettre majuscule
En plus de vérifier si la version majuscule de la chaîne est égale à elle-même, nous pourrions vouloir nous assurer qu’il y a au moins une lettre majuscule.Nous pouvons utiliser une expression régulière:
if ($str =~ //) { print "There is an upper case letter\n";}
Cela fonctionnera avec l’ABC latin, mais ne correspondra pas aux caractères tels queáéíóöőúúüŰ (les versions majuscules d’áéíóöőúüü) de l’ABC hongrois, ni à d’autres caractères étranges comme un Umlaut Ä (la version majuscule d’ä).
Au moins une lettre Unicode en majuscules
Pour cela, il y a \p{Majuscules} qui correspondra exactement à un caractère unicode en majuscules. Cela correspondra donc à l’un de ces éléments : ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ
if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}
Tous les caractères sont des lettres Unicode en majuscules
Il pourrait ne pas suffire d’avoir une lettre en majuscules.Vous devrez peut-être tous les avoir: Dans ce cas, nous pouvons utiliser les ancres ^ et regregex pour correspondre respectivement au début et à la fin de la chaîne.
Nous appliquons également le quantificateur + qui signifie 1 ou plus de la chose précédente. Dans notre cas, un ou plusieurs des caractères majuscules précédents.
if ($str =~ /^\p{Uppercase}+$/) { print "There is an upper case Unicode letter\n";}
Tous les caractères sont des lettres Unicode majuscules ou un espace
Bien sûr, il est rare qu’une chaîne ne soit composée que de lettres majuscules.parfois, nous voulons également autoriser d’autres personnages. Par exemple, nous aimerions également autoriser les espaces. Dans ce cas, nous créons une classe de caractères (entre crochets) qui est construite à partir d’un espace et de la classe de caractères représentant toutes les lettres majuscules du monde: .
if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}
Essayer les exemples
Lorsque vous essayez l’exemple, nous pouvons soit lire les chaînes à partir d’un file.In dans ce cas, nous voudrons probablement ouvrir le fichier en utilisant l’indicateur UTF-8 activé:
open(my $fh, '<:encoding(UTF-8)', $filename)
D’autre part, si les chaînes à comparer sont dans le code, il faut ajouter use utf8; au début du script.
Dans les deux cas, il est recommandé de changer les canaux de sortie standard pour utiliser utf-8 avec les éléments suivants:
use open ':std', ':encoding(utf8)';
Essayez cet exemple:
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"; }}