Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверить переменную
Форумы портала PHP.SU » PHP » Регулярные выражения » Проверить переменную

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

1. vsll - 06 Апреля, 2011 - 20:53:14 - перейти к сообщению
Мне нужно чтобы $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]; }
2. grefon - 06 Апреля, 2011 - 20:59:21 - перейти к сообщению
Так это можно и через preg_match сделать. Зачем писать допфункции?
PHP:
скопировать код в буфер обмена
  1.  
  2. if (preg_match("/^[0-9]+$/", $m[1])) { $weblink_cy = $m[1]; }
  3.  
3. vsll - 06 Апреля, 2011 - 21:04:32 - перейти к сообщению
grefon

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

p.s. экспериментировать уже больше на сегодня не хочется, а то с хостинга выгонят)))
4. grefon - 06 Апреля, 2011 - 21:08:10 - перейти к сообщению
Чисто теоретически и Ваш и мой вариант делает одно и тоже. Если $m[1] = wtf, то переменная $weblink_cy = false.
Ваш вариант только еще проверяет не массив ли Вы обрабатываете. Я как-то в этом смысла особого не вижу, если Вы знаете что передаете в $m[1] или текст или число.
5. vsll - 06 Апреля, 2011 - 21:10:28 - перейти к сообщению
$m[1] - это из контента другого сайта, но всё равно спасибо

^[0-9]+$ - это только если первый символ должен быть число или можно так все символы в строке обозначить как числа?
6. DeepVarvar - 06 Апреля, 2011 - 23:57:51 - перейти к сообщению
Vasiliya пишет:
число или

В контексте регэксп - только символы.
В контексте пхп - может быть и тем и тем, переход из одного типа в другой происходит автоматически.
Поэтому приходится глядеть в оба, что мы там складываем или конкатенируем.
7. EuGen - 07 Апреля, 2011 - 09:09:47 - перейти к сообщению
Через is_numeric будет быстрее.
Да и, скажем, примеры выше отвергнут правильное число 1.33E+5 к примеру.
8. vsll - 07 Апреля, 2011 - 18:04:01 - перейти к сообщению
Вот 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 к чему?
9. Мелкий - 07 Апреля, 2011 - 18:45:50 - перейти к сообщению
Vasiliya пишет:
вот эта хитрость !is_array к чему?

Для того, чтобы функция верно отработала и вернула нужный результат. Ведь если preg_match'у выдать вторым параметром массив, он будет ругаться.
10. vsll - 07 Апреля, 2011 - 18:54:47 - перейти к сообщению
Мелкий пишет:
выдать вторым параметром массив
опишите на примере как это выглядит, pls
11. movEAX - 07 Апреля, 2011 - 19:10:29 - перейти к сообщению
а чем вам is_numeric не нравится?
12. vsll - 07 Апреля, 2011 - 19:28:51 - перейти к сообщению
movEAX мне нужно понять логику своих разработчиков, неглупые люди всё таки, есть чему поучиться)
13. Мелкий - 07 Апреля, 2011 - 20:08:24 - перейти к сообщению
Vasiliya пишет:
опишите на примере как это выглядит, pls


будет варнинг.
14. vsll - 07 Апреля, 2011 - 20:21:54 - перейти к сообщению
Мелкий спасибо, последний пробел дилитед

p.s. кстати в описании функции нет, что string subject не может быть массивом
15. Мелкий - 07 Апреля, 2011 - 20:30:00 - перейти к сообщению
Vasiliya пишет:
кстати в описании функции нет, что string subject не может быть массивом

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

 

Powered by ExBB FM 1.0 RC1