Ik heb teksten in UTF-8 met diakritische tekens, en ik wil graag controleren of de eerste letter van deze tekst een hoofdletter of kleine letter is. Hoe doe je dit?
Antwoord 1, autoriteit 100%
function starts_with_upper($str) {
$chr = mb_substr ($str, 0, 1, "UTF-8");
return mb_strtolower($chr, "UTF-8") != $chr;
}
Merk op dat mb_substr nodig is om het eerste teken correct te isoleren.
Antwoord 2, autoriteit 54%
Gebruik ctype_upper
om hoofdletters te controleren:
$a = array("Word", "word", "wOrd");
foreach($a as $w)
{
if(ctype_upper($w{0}))
{
print $w;
}
}
Antwoord 3, autoriteit 28%
Ik ben van mening dat een preg_
-oproep de meest directe, beknopte en betrouwbare oproep is in vergelijking met de andere oplossingen die hier worden gepost.
echo preg_match('~^\p{Lu}~u', $string) ? 'upper' : 'lower';
Mijn patroonoverzicht:
~ # starting pattern delimiter
^ #match from the start of the input string
\p{Lu} #match exactly one uppercase letter (unicode safe)
~ #ending pattern delimiter
u #enable unicode matching
Let op wanneer ctype_
en < 'a'
faalt met deze reeks tests.
Code: (Demo)
$tests = ['âa', 'Bbbbb', 'Éé', 'iou', 'Δδ'];
foreach ($tests as $test) {
echo "\n{$test}:";
echo "\n\tPREG: " , preg_match('~^\p{Lu}~u', $test) ? 'upper' : 'lower';
echo "\n\tCTYPE: " , ctype_upper(mb_substr($test, 0, 1)) ? 'upper' : 'lower';
echo "\n\t< a: " , mb_substr($test, 0, 1) < 'a' ? 'upper' : 'lower';
$chr = mb_substr ($test, 0, 1, "UTF-8");
echo "\n\tMB: " , mb_strtoupper($chr, "UTF-8") == $chr ? 'upper' : 'lower';
}
Uitvoer:
âa:
PREG: lower
CTYPE: lower
< a: lower
MB: lower
Bbbbb:
PREG: upper
CTYPE: upper
< a: upper
MB: upper
Éé: <-- trouble
PREG: upper
CTYPE: lower <-- uh oh
< a: lower <-- uh oh
MB: upper
iou:
PREG: lower
CTYPE: lower
< a: lower
MB: lower
Δδ: <-- extended beyond question scope
PREG: upper <-- still holding up
CTYPE: lower
< a: lower
MB: upper <-- still holding up
Als iemand onderscheid moet maken tussen hoofdletters, kleine letters en niet-letters, bekijk dan dit bericht.
Misschien gaat het bereik van deze vraag te ver, maar als uw invoertekens bijzonder squirrelly zijn (ze bestaan mogelijk niet in een categorie die Lu
aankan), wilt u misschien controleren of het eerste teken heeft hoofdlettervarianten:
\p{L&} of \p{Cased_Letter}: een letter die bestaat in kleine letters en hoofdletters (combinatie van Ll, Lu en Lt).
Als u Romeinse cijfers (“Cijferletters”) met varianten van SMALL
wilt opnemen, kunt u indien nodig dat extra bereik aan het patroon toevoegen.
https://www.fileformat.info/info/unicode/ categorie/Nl/list.htm
Code: (Demo)
echo preg_match('~^[\p{Lu}\x{2160}-\x{216F}]~u', $test) ? 'upper' : 'not upper';
Antwoord 4, autoriteit 20%
Geprobeerd?
$str = 'the text to test';
if($str{0} === strtoupper($str{0})) {
echo 'yepp, its uppercase';
}
else{
echo 'nope, its not upper case';
}
Antwoord 5, autoriteit 10%
Zoals gebruikt in de Kohana 2 autoloader-functie:
echo $char < 'a' ? 'uppercase' : 'lowercase';
Als een tekenreeks naar een geheel getal wordt gegoten, wordt het geëvalueerd tot zijn ASCII-nummer. Zoals u in de ASCII-tabel weet, zijn er eerst enkele besturingstekens en andere. Dan de hoofdletters uit het Latijnse alfabet. En dan de kleine letters uit het Latijnse alfabet. Zo kun je eenvoudig controleren of de code van een letter kleiner of groter is dan het kleine Latijnse teken a
.
Dit is trouwens ongeveer twee keer zo snel als een oplossing met reguliere expressies.
Antwoord 6, autoriteit 10%
Houd er rekening mee dat PHP de ctype
-familie biedt, zoals ctype_upper.
Je moet eerst de landinstelling correct instellen via setLocale()om het om met UTF-8 te werken.
Zie bijvoorbeeld de opmerking op ctype_alpha.
Gebruik:
if ( ctype_upper( $str[0] )) {
// deal with 1st char of $str is uppercase
}
Antwoord 7, autoriteit 8%
Ik wilde niet dat getallen en anderen een bovenste teken waren, dus gebruik ik:
if(preg_match('/[A-Z]$/',$char)==true)
{
// this must be an upper char
echo $char
}
Antwoord 8, autoriteit 4%
En alleen:
if (ucfirst($string) == $string) {dosomething();}
Antwoord 9, autoriteit 4%
Als je het in een leuke functie wilt, heb ik dit gebruikt:
function _is_upper ($in_string)
{
return($in_string === strtoupper($in_string) ? true : false);
}
Bel dan gewoon..
if (_is_upper($mystring))
{
// Do....
}
Antwoord 10
if(ctype_upper(&value)){
echo 'uppercase';
}
else {
echo 'not upper case';
}