Защита за вписване на име

IvayloGoranov

Registered
Здравейте, използвам тази защита:
Код:
);
		
			if( isset( $_POST['dobavi'] ) ) {
					if( empty( $_POST['ime'] ) ) {
						print 'Моля, попълнете име!<br />';
					}
но се питам как да направя ако някой натиска само шпацията да не се вписват символи и също така как да направя всичко да е на кирилица ?
Смисъл кирилицата да е задължителна ? Ако е на латиница да изписва, че е задължителна кирилица и коментара не може да бъде записан.
 
Може да ползваш str_word_count(функция която брои думите) или strlen има и още варианти, а за другото ползвай preg_match поразрови се из форума има доста теми със същото което искаш и ти.

@webdeveloper - http://www.laptoprepair101.com/wp-images/key/space-bar-key-4.jpg копчето на което са безименния и средния пръст
 
webdeveloper го каза вече, но:

PHP:
$ime = trim( $_POST['ime'] ); // Премахваш празното пространство отляво и отдясно

if( !preg_match( '`^[а-я0-9 ]+$`i', $ime ) ) {
    // ERROR
}
else {
    // Success
}
 
sandh каза:
webdeveloper го каза вече, но:

PHP:
$ime = trim( $_POST['ime'] ); // Премахваш празното пространство отляво и отдясно

if( !preg_match( '`^[а-я0-9 ]+$`i', $ime ) ) {
    // ERROR
}
else {
    // Success
}
Трябва да стане така значи ?
Код:
if( isset( $_POST['dobavi'] ) ) {
					if( empty( $_POST['ime'] ) ) {
						print 'Моля, попълнете име!<br />';

$ime = trim( $_POST['ime'] ); // Премахваш празното пространство отляво и отдясно

if( !preg_match( '`^[а-я0-9 ]+$`i', $ime ) ) {
    // ERROR
}
else {
    // Success
 
@sandh - така ще позволи само кирилица и цифри, но ако има някакви цитати или пък знам ли, нещо подобно, но пак кирилицата да е задължителна, би било добре pattern-a да е #[а-я\s]+#ui, но пък ако реши да използва твоят начин би било добре да сложи "\s" за свободни места, понеже както разбирам от думите му "коментар", не мисля, че ще е само от една дума. Също така ще му е нужен и модификатор "u" за да обработи правилно кирилицата.
 
Сложил съм един спейс, защото предполагам, че няма да има табулации и нови редове в име (въпреки, че съм разрешил цифрите 0-9 :) ), но ако има такива случаи може да се ползва \s.

Иначе u модификатора е добро допълнение. Само трябва да се внимава, защото не всички ползват utf-8 кодировка. Ако се ползва различна кодировка ще трябва да се ползва нещо такова:
PHP:
//При положение, че кодировката на файла е windows-1251 например
preg_match(
    iconv( 'windows-1251', 'utf-8', '#^[а-я\s]+$#ui' ),
    iconv( 'windows-1251', 'utf-8', $ime ) // Тук convert-ването се извършва само в случай, че стринга, който се match-ва също не е utf-8
);

IvayloGoranov - е, не точно... Там където съм ти оставил коментари се очаква да допълниш. Аз бих го направил така:

PHP:
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
    $ime = trim( $_POST[ime] );

    if( preg_match( '`^[а-я\s]+$`ui', $ime ) ) {
        print 'Моля, попълнете име!<br />';
    }
}
Ако не ползваш utf-8 кодировка можеш да ползваш примера за preg_match, който дадох в началото на поста.
 

Back
Горе