Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > пропустить пробел в регулярном выражении


Автор: supervladislav 3.9.2008, 16:28

подскажите пожалуйста ,мне нужно проверить кол-во символов и чтобы все символы были цифры ,но дело в том что если поле незаполнено 
пхп считает его за пробел ,подскажите можно было бы это как-то исключить.Чтобы если в поле небыло ничего ,не вываливалось 
сообщение тоесть чтобы условие невыполнялось
Код

<? if(!preg_match("/^[0-9]{1,15}$/",$cena) && $_SERVER['REQUEST_METHOD']=='POST' && strlen($cena)<=15) {?>
<tr align="left" width=400px>
    <td colspan="2" height=20  align="center"><span class=gr><font color=red>Введите числовое значение цены,не больше 15 символов</font></span></td>
    </tr>

<? } ?>

Автор: skyboy 3.9.2008, 21:01
Цитата(supervladislav @  3.9.2008,  15:28 Найти цитируемый пост)
но дело в том что если поле незаполнено 
пхп считает его за пробел

кто тебе такое сказал? в PHP искусственный интеллект не встроен, между прочим.

Автор: gta4kv 3.9.2008, 22:33
1) а http://ru2.php.net/is_numeric чем не подошёл?
2) якобы «пробелы» попробуйте убрать с помощью http://ru2.php.net/trim
3) ваш код из раза в раз выглядит всё ужасающее - ужасающее... когда уже научимся html отделять от php?

Добавлено через 1 минуту и 51 секунду
и это... http://php.net/var_dump тоже никто не отменял.. показали бы хоть

Автор: supervladislav 4.9.2008, 10:17
gta4kv, если ненравится несмотри 
я спрашивал  как сделать так ,чтобы когда пользователь не ввёл ничего чтобы условие невыполнялось как это вбить в регулярку
Код

!preg_match("/^[0-9]{1,15}$/",trim($cena))

как вот в это выражение где [0-9] вписать ещё пробел

Автор: gta4kv 4.9.2008, 13:45
Цитата

как вот в это выражение где [0-9] вписать ещё пробел

А мануал для кого предумали!? (\s) - пробел, \t, \n, \r


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

Цитата

"/^[0-9]{1,15}$/"

бугага, 15 символов!?

Автор: supervladislav 4.9.2008, 13:51
\s  данный симыол вписывается вот сюда
 
Код

"/^[0-9\s]{1,15}$/"


Автор: supervladislav 4.9.2008, 14:47
так-как ты придлогал не получилось )))))
как в регулярку пробел то вставить я правильно делаю )))выше 

Автор: supervladislav 7.9.2008, 19:11
Всёравно  условие почему-то выполняется

Код

<? if(!preg_match("/^[\s0-9]{1,15}$/",trim($cena)) && $_SERVER['REQUEST_METHOD']=='POST' && strlen($cena)<=15) {?>
<tr align="left" width=400px>
    <td colspan="2" height=20  align="center"><span class=gr><font color=red>Введите числовое значение цены,не больше 15 символов</font></span></td>
    </tr>

<? } ?>

Автор: gta4kv 7.9.2008, 19:17
Код

if( ! is_numeric( trim( $cena ) ) or strlen( $cena ) > 15 )
{
         .....
}

Автор: supervladislav 7.9.2008, 19:49
а как работатет  is_numeric
а как моё выражение изменить так чтобы к цифрам добавить ещё пробел )))этож очень просто помойму

Автор: gta4kv 8.9.2008, 15:00
Цитата(supervladislav @ 7.9.2008,  19:49)
а как работатет  is_numeric

Я уже ссылку выше показывал, 
http://ru2.php.net/is_numeric ;)

Автор: supervladislav 8.9.2008, 18:44
понятно ,а разве нельзя в выражение какнить это запихнуть )))типо что-то вроде пустого места или пробела

Автор: gta4kv 8.9.2008, 19:27
(\s)

Автор: supervladislav 8.9.2008, 20:21
целое выражение как будет выглядеть

Автор: zibox86 8.9.2008, 20:43
Вот так попробуй
Код

/^(([0-9]{1,15})|([^\s]))+$/

Автор: gta4kv 8.9.2008, 20:44
Ну щаз еще целое выражение.

http://forum.vingrad.ru/forum/topic-206380/hl/%25D1%2587%25D0%25B0%25D1%2581%25D1%2582%25D1%258C+%25D1%2580%25D0%25B5%25D0%25B3%25D1%2583%25D0%25BB%25D1%258F%25D1%2580%25D0%25BA%25D0%25B8/index.html

вот ссылка в тему, «необязательная часть регулярки».

Автор: supervladislav 12.9.2008, 14:06
непроходит 

Автор: skyboy 12.9.2008, 14:55
не понимаю ни черта.
если тебе, supervladislav, надо пропустить пробел, то зачем ты добавляешь пробел для поиска-проверки в строке?
если у тебя, supervladislav, действительно пустая строка, то регулярка "^[0-9]{1,15}$" или "^\d{1,15}$", что то же самое, но короче, не должно совпадать с пустой строкой. потому - либо проблема в остальной части кода условия(ты полностью и дословно привел код?), либо просто - в остальной части кода.

Добавлено через 2 минуты и 1 секунду
кстати говоря, метод передачи у тебя точно - POST?
Вообще говоря, не надо проверять на strlen и регулярку одновременно. вполне можно обойтись одним чем-то.
а ты делал вывод нужной переменной? точно там пустая строка? не пробел, не перевод строки....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)