PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
vsll
Отправлено: 06 Апреля, 2011 - 20:53:14
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Мне нужно чтобы $m[1] была числом, перед тем как отправить её в базу данных, нижеследующее выражение делает, то что мне нужно?

PHP:
скопировать код в буфер обмена
  1.  
  2. // Custom preg-match function (в ядре)
  3. function preg_check($expression, $value) {
  4.         if (!is_array($value)) {
  5.                 return preg_match($expression, $value);
  6.         } else {
  7.                 return false;
  8.         }
  9. }
  10. // в некотром файле
  11. if (preg_check("/^[0-9][0-9]*$/", $m[1])) { $weblink_cy = $m[1]; }
 
 Top
grefon
Отправлено: 06 Апреля, 2011 - 20:59:21
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Так это можно и через preg_match сделать. Зачем писать допфункции?
PHP:
скопировать код в буфер обмена
  1.  
  2. if (preg_match("/^[0-9]+$/", $m[1])) { $weblink_cy = $m[1]; }
  3.  

(Отредактировано автором: 06 Апреля, 2011 - 21:05:14)



-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
vsll
Отправлено: 06 Апреля, 2011 - 21:04:32
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




grefon

чисто теоретически, что выдаст в первом случае, если $m[1] = wtf и что выдаст в вашем случае

p.s. экспериментировать уже больше на сегодня не хочется, а то с хостинга выгонят)))
 
 Top
grefon
Отправлено: 06 Апреля, 2011 - 21:08:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Чисто теоретически и Ваш и мой вариант делает одно и тоже. Если $m[1] = wtf, то переменная $weblink_cy = false.
Ваш вариант только еще проверяет не массив ли Вы обрабатываете. Я как-то в этом смысла особого не вижу, если Вы знаете что передаете в $m[1] или текст или число.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
vsll
Отправлено: 06 Апреля, 2011 - 21:10:28
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




$m[1] - это из контента другого сайта, но всё равно спасибо

^[0-9]+$ - это только если первый символ должен быть число или можно так все символы в строке обозначить как числа?

(Отредактировано автором: 06 Апреля, 2011 - 21:13:35)

 
 Top
DeepVarvar Супермодератор
Отправлено: 06 Апреля, 2011 - 23:57:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Vasiliya пишет:
число или

В контексте регэксп - только символы.
В контексте пхп - может быть и тем и тем, переход из одного типа в другой происходит автоматически.
Поэтому приходится глядеть в оба, что мы там складываем или конкатенируем.
 
 Top
EuGen Администратор
Отправлено: 07 Апреля, 2011 - 09:09:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Через is_numeric будет быстрее.
Да и, скажем, примеры выше отвергнут правильное число 1.33E+5 к примеру.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
vsll
Отправлено: 07 Апреля, 2011 - 18:04:01
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Вот grefon спасибо вам ещё раз
вы заставили меня снова задуматься над ^[0-9]+$ и до меня наконец-то дошёл его смысл:
[0-9]+ означает, что обязательно подряд должна идти минимум одна цифра, но максимальное количество не указано значит отсечёт на первой букве и отправит в базу, а если длина превышает допустимую длину для integer, то излишнее отсечёться, ведь у разработчиков даже функция на эту тему есть в ядре:
PHP:
скопировать код в буфер обмена
  1. // Validate numeric input
  2. function isnum($value) {
  3.         if (!is_array($value)) {
  4.                 return (preg_match("/^[0-9]+$/", $value));
  5.         } else {
  6.                 return false;
  7.         }
  8. }

только я не могу себе представить массив из одних только цифр Однако вот эта хитрость !is_array к чему?
 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2011 - 18:45:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 11900
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 615 раз(а)




Vasiliya пишет:
вот эта хитрость !is_array к чему?

Для того, чтобы функция верно отработала и вернула нужный результат. Ведь если preg_match'у выдать вторым параметром массив, он будет ругаться.


-----
PostgreSQL DBA
 
 Top
vsll
Отправлено: 07 Апреля, 2011 - 18:54:47
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Мелкий пишет:
выдать вторым параметром массив
опишите на примере как это выглядит, pls
 
 Top
movEAX
Отправлено: 07 Апреля, 2011 - 19:10:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




а чем вам is_numeric не нравится?


-----
армия.. самое убогое место
 
 Top
vsll
Отправлено: 07 Апреля, 2011 - 19:28:51
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




movEAX мне нужно понять логику своих разработчиков, неглупые люди всё таки, есть чему поучиться)
 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2011 - 20:08:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11900
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 615 раз(а)




Vasiliya пишет:
опишите на примере как это выглядит, pls


будет варнинг.


-----
PostgreSQL DBA
 
 Top
vsll
Отправлено: 07 Апреля, 2011 - 20:21:54
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Мелкий спасибо, последний пробел дилитед

p.s. кстати в описании функции нет, что string subject не может быть массивом

(Отредактировано автором: 07 Апреля, 2011 - 20:27:25)

 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2011 - 20:30:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11900
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 615 раз(а)




Vasiliya пишет:
кстати в описании функции нет, что string subject не может быть массивом

Есть.
Когда функция может принять как массив, так и строку или число - пишется mixed.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB