Не приема кирилица..

kulov

Registered
Здравейте, проблема е следният, правя проверка за валидно име с preg_match, но изникна проблем, като валидно име се има в предвид само латинициа и кирилица, от 3 до 25 знака, малки и големи букви, но не разчита кирилицата като валиден символ, та ето го кода..


Код:
<?php
header("Content-type: text/html; charset=Windows-1251");
@include $path."../functions/errormsg.php";
@include $path."../functions/donemsg.php";
@include $path."../include/config.php";
define('IN_VALID', true);
$fname=htmlspecialchars(addslashes($_POST['name']));
$fname_check=preg_match('/^[a-zа-я]{3,25}+$/i', $fname);
if (!$fname_check)
{
   errorMsg('Името е невалидно !');
}
else
{
   doneMsg('Името е валидно !');
}
?>
 
Код:
<?php
header("Content-type: text/html; charset=Windows-1251");
@include $path."../functions/errormsg.php";
@include $path."../functions/donemsg.php";
@include $path."../include/config.php";
define('IN_VALID', true);
$fname=htmlspecialchars(addslashes($_POST['name']));
$fname_check=preg_match('/^[a-zA-Zа-яА-Я]{3,25}+$/u', $fname);
if (!$fname_check)
{
   errorMsg('Името е невалидно !');
}
else
{
   doneMsg('Името е валидно !');
}
?>

Така би трябвало да стане.

P.S. Не си позволил главни букви, това също съм го включил в скрипта.
 
bancov96 каза:
Код:
<?php
header("Content-type: text/html; charset=Windows-1251");
@include $path."../functions/errormsg.php";
@include $path."../functions/donemsg.php";
@include $path."../include/config.php";
define('IN_VALID', true);
$fname=htmlspecialchars(addslashes($_POST['name']));
$fname_check=preg_match('/^[a-zA-Zа-яА-Я]{3,25}+$/u', $fname);
if (!$fname_check)
{
   errorMsg('Името е невалидно !');
}
else
{
   doneMsg('Името е валидно !');
}
?>

Така би трябвало да стане.

P.S. Не си позволил главни букви, това също съм го включил в скрипта.

Според теб защо е това i .. то е точно за това, да не прави разлика между големи и малки букви..

След малко ще пробвам кода, защото трябва да утида на другият си хард.. защото там е сайта, като го пробвам ще си едитна мнението :?:
 
Пак. нестава, дори излиза грешка..


Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 9 in /Applications/XAMPP/xamppfiles/htdocs/schoolcms/check/name.php on line 8
 
cnoko каза:
т'ва u го махни като гледам чарсета не ти е utf-8

Проблема не идва от u-то, не говоря за грешката, грешката знам,че идва от там.. погледни, че единствената разлика в кода ни беше, че той си мислише май, че не съм сложил главни букви.. Идва от някъде другаде и немога да се начудя от къде :idea:
 
:) това ти е новия pattern
Код:
'/^[a-zA-Z\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDC\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFC\xFE\xFF
{3,25}$/'
 
cnoko каза:
:) това ти е новия pattern
Код:
'/^[a-z\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDC\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFC\xFE\xFF
{3,25}$/'

Не мога точно в момента да го пробвам, тей като имам някакъв проблем с ОС-то на хард диска където ми е сайта.. утре като го пробвам ще пиша за резултата ..
 
интересно...
провери какъв енкодинг ти е в браузера дали не си го сменя щото не само Header трябва да сложиш
 
cnoko каза:
интересно...
провери какъв енкодинг ти е в браузера дали не си го сменя щото не само Header трябва да сложиш

Не, не е от енкодинга на браузъра..
 
ако не стана и така си сменяй сървъра
Код:
<?php
header("Content-Type: text/html;charset=windows-1251");
$allowed_charsed = implode("", range('a','z')) . implode("", range('A', 'Z')) . "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDC\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFC\xFE\xFF";
$text = '';
if (isset($_POST['text']))
{
	$error = false;
	$text = htmlspecialchars($_POST['text']);
	for ($i = 0, $len = strlen($text); $i < $len; $i++)
	{
		if (strpos($allowed_charsed, $text[$i]) === false)
		{
			$error = true;
		}
	}
	if ($error)
	{
		echo 'Не валидно име';
	}
	else
	{
		echo 'Валидна име';
	}
}
?>
<form method="post">
<input type="text" name="text" value="<?php echo $text; ?>" />
<input type="submit" name="submit" value="Check" />
</form>
пробваи го първо по отделно (в др файл)
 
Както писах и по-горе, но тука ще дам целия пример, който съм ползвал на едно място и си работи без проблем:

Код:
'/[^а-яА-Я0-9\'\"_\-]+$/su'

Тази част su би трябвало да ти оправи проблема ;)
 
thinklinux каза:
Както писах и по-горе, но тука ще дам целия пример, който съм ползвал на едно място и си работи без проблем:

Код:
'/[^а-яА-Я0-9\'"_\-]+$/su'

Тази част su би трябвало да ти оправи проблема ;)

Хем дава грешка за чартсета, хем нества :D
 
за сега тва се сещам:
Код:
$text = mysql_real_escape_string($text);
$result = mysql_query("SELECT ('$text' REGEXP '^[a-zа-яА-Я]{3,25}$') as result");
за MySQL
Или по другия по дългия pattern пробвай
 

Back
Горе