There is such a function:

function validatenick ($nick, $js) { include('adodb5/adodb.inc.php'); include('config.php'); $db = ADONewConnection($db_driver); # $db->debug = true; $db->Connect($db_server, $db_user, $db_pass, $db_name); $valid = 0; // Корректный ник. $lat = ["A","B","C","E","H","I","K","M","O","P","T","X","a","c","e","i","k","o","p","x","y"]; $cyr = ["А","В","С","Е","Н","I","К","М","О","Р","Т","Х","а","с","е","і","к","о","р","х","у"]; $tnick = ""; if (!preg_match("/^[А-ЯЁIЇҐЎ]{1}[а-яёіїґў]{2,19}$/", $nick)) { if (!preg_match("/^[AZ]{1}[az]{2,19}$/", $nick)) $valid = 1; // Некорректный ник. else { // Латинский ник. for ($i = 0; $i < strlen($nick); $i++) { if (!array_search($nick{$i}, $lat)) { $tnick = "NULL"; // Не имеет идентичного по написанию кириллического ника. break; } else $tnick .= $cyr[array_search($nick{$i}, $lat)]; } } } else { // Кириллический ник. for ($i = 0; $i < strlen($nick); $i++) { if (!array_search($nick{$i}, $cyr)) { $tnick = "NULL"; // Не имеет идентичного по написанию латинского ника. break; } else $tnick .= $lat[array_search($nick{$i}, $cyr)]; } } if ($valid == 0) { $rs = &$db->Execute("select * from users where nick = '".$nick."'"); if ($rs->PO_RecordCount('users', "nick = '".$nick."'") > 0) $valid = 2; // Этот ник занят. else if ($tnick != "NULL") { $rs = &$db->Execute("select * from users where nick = '".$tnick."'"); if ($rs->PO_RecordCount('users', "nick = '".$tnick."'") > 0) $valid = 3; // Зарегистрирован идентичный по написанию ник. } } if ($js == true) print($valid); else return $valid; } 

If at the entrance she gets a nickname in Latin, then everything is ok. But an attempt to feed her Cyrillic nickname always leads to the return of $valid = 1 . Suspecting that the problem is in the transmitted data, I asked a knowingly correct Cyrillic nickname inside the function, but the result was the same. Removing all non-russian characters from the expression and did not solve the problem. What could be the snag?

Page encoding:

 header("Content-Type: text/html; charset=UTF-8"); 

The file encoding is the same. PHP version:

PHP 5.4.9 -4ubuntu2.3 (cli) (built: Sep 4 2013 19:37:07)

    1 answer 1

    Use the "u" modifier.

     preg_match("/^[А-Я]+$/u", $nick); 
    • It does not work - DivMan