A zkusil jeho funkčnost na svém jménu, které jsem pomocí funkce mb_substr rozložil na jednotlivá písmena (uložená v poli). Každé písmeno jsem nechal porovnat s jednoduchým výrazem obsahujícím znakovou třídu v POSIX tvaru (tedy [:graph:] atd.)
Vybrané znakové třídy byly: alnum, punct a cntrl.
Výsledek měl být pole, v němž se měla šestkrát objevit třída alnum. Tato třída se sice v poli objevila, ale ne šestkrát, ale pouze jednou. A dvakrát se objevila třída cntrl. To tedy nechápu.
Odkdy se v slově Václav vyskytují řídící znaky?! A proč některá písmena nepoznal?
O zjišťování znakových tříd se stará tato metoda:
- Kód: Vybrat vše
private function Get_CharacterClasses($Character)
{
$CharacterClasses = NULL;
switch($this -> CharacterClassesMode)
{
case 0:
foreach(LoadInternals::RegexpGraphMode() as $Class)
{
if(mb_ereg($Class, $Character))
{
$CharacterClasses = $Class;
}
}
break;
case 1:
foreach(LoadInternals::RegexpAlnumMode() as $Class)
{
if(mb_ereg($Class, $Character))
{
$CharacterClasses = $Class;
}
}
break;
case 2:
foreach(LoadInternals::RegexpAlphaMode() as $Class)
{
if(mb_ereg($Class, $Character))
{
$CharacterClasses = $Class;
}
}
break;
case 3:
foreach(LoadInternals::RegexpStrictMode() as $Class)
{
if(mb_ereg($Class, $Character))
{
$CharacterClasses = $Class;
}
}
break;
}
return $CharacterClasses;
}
Dle nastavení použitých znakových tříd se každý znak zkontroluje, zda vyhovuje znakovým třídám ze seznamu.
Seznamy znakových tříd jsou sestaveny tak, aby (pokud možno) žádný znak nemohl mít dvě či více znakových tříd.
Chyba může být v nastavení - resp. v špatném použití či nepoužití nějaké další funkce, kterou je nutné použít. Ale nevím, kterou a jak použít.
Zatím mám použitu pouze funkci mb_regex_encoding s parametrem UTF-8 - a tu mám použitu na začátku metody, v níž je výše uvedená metoda volána.
Původně jsem měl použitu funkci preg_match. Ta sice nepoznala české znaky, ale znaková třída u ostatních znaků byla uvedena správně.