Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление пустых строк в тексте
 
 автор: tima2010   (20.04.2012 в 16:38)   письмо автору
 
 

Привет!

Столкнулся с проблемой проверки строки на пустоту.

Строки записываются в mysql, перед записью обрабатываю ее и проверяю, если пустая то выводим ошибку иначе записываем.

Но если посетитель отправит кучу 'enter' даже без текста строка все равно пройдет на запись. Как удалить или проверить на пустоту строки если в ней присутствует не один перенос а много /r/n

Пример кода:
<textarea name="str" cols="15" rows="15"></textarea>
<input type="sumbit" name="insert" value="Отправить">


<?php
function check_text($str) {

    
$str stripslashes($str);
    
$str mysql_real_escape_string($str);
    
$str trim($str);
    
$str htmlspecialchars($str);
    
    
$str str_replace(array("\r\n","\n","\r"), ''$str); // удалит только 1 перенос не все
    
return  $str;
}


if(isset(
$_POST['insert'])) {

$str check_text($_POST['str']); // допустим отправлено пустоее сообщение состоящее только из множества Enter (переносов строк)

    
if($str == '') {
        echo 
'ошибка пусто';
    } else {
        echo 
'Ваше сообщение:'.nl2br($str);
    }
    
}
?>

  Ответить  
 
 автор: tima2010   (20.04.2012 в 19:50)   письмо автору
 
   для: tima2010   (20.04.2012 в 16:38)
 

как вы считаете подойдет ли такой вариант? не сильно ли он ужасен?


<?php

$str_arr 
explode('\n'$str);

$str check_arr($str_arr);

function 
check_arr($array) {
    
$result = array();
    foreach (
$array as $key => $value) {
        if (
$value != '') {
            
$result_str .= $value.'\r\n';
        }
    }
        return 
$result_str;
}
?>

  Ответить  
 
 автор: confirm   (20.04.2012 в 20:01)   письмо автору
 
   для: tima2010   (20.04.2012 в 16:38)
 

По логике действий, сперва удаляют пробелы в строке, а уж после этого издеваются на нею.
htmlspecialchars при внесении в базу, это головная боль при последующей работе со строкой.
Для удаления пробелов в строке содержащей только их, или переводов строки, достаточно операции trim.
<?
$s 
'



'
;
var_dump($s);
$s trim($s);
var_dump($s);

  Ответить  
 
 автор: tima2010   (20.04.2012 в 20:18)   письмо автору
 
   для: confirm   (20.04.2012 в 20:01)
 

Спасибо! Да действительно головную боль htmlspecialchars уже вызвал, буду его использовать только при выводе

  Ответить  
 
 автор: tima2010   (20.04.2012 в 20:33)   письмо автору
 
   для: confirm   (20.04.2012 в 20:01)
 

.А если мне нужно удалить так же пустые строки между буквами? хорош ли вариант представленный выше где данные заносятся в массив?

То есть из данных:

1


2


получить

1
2

  Ответить  
 
 автор: Sfinks   (21.04.2012 в 12:03)   письмо автору
 
   для: tima2010   (20.04.2012 в 20:33)
 

$str = preg_replace( "#\s*?\r?\n\s*?(?=\r\n|\n)#s" , "" , $str );

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования