[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: помогите найти ошибку!!! в регулярных выражениях
*kush*
<?php
$_POST['name'];
if(preg_match("[0-9]", $_POST['name']))
{
echo "все ровнячком";
}
else echo "все хреново";
?>



Спустя 4 минуты, 59 секунд (30.06.2010 - 15:23) DedMorozzz написал(а):
Читай внимательно про синтаксис Регулярок. Тут он не соблюден. В данном случае необходимо так:
preg_match("#[0-9]#", $_POST['name'])
- причём только 1 цифра будет.
И чему ТУТ равно ПОСТ['name']?

Спустя 1 минута, 23 секунды (30.06.2010 - 15:25) linker написал(а):
А что хотите вообще получить?
preg_match('/^\d+$/') - только цифры
preg_match('/[0-9]/'), равносильно preg_match('/\d/') - тру если есть хотя бы одна цифра

Спустя 1 минута, 23 секунды (30.06.2010 - 15:26) waldicom написал(а):
Для простых случае лучше использовать функции типа ctype_*

Спустя 45 секунд (30.06.2010 - 15:27) *kush* написал(а):
ура !!! ура!!! получилось это лучший подарок!!!! в книге Кузнецова про # ничего не сказано((((

DedMorozzz СПАСИБО


и всем кто помогал

Спустя 39 секунд (30.06.2010 - 15:27) DedMorozzz написал(а):
Кстати по поводу "\d" не советую писать. В длинных строковых выражениях, где много чего экранирется, очень легко потерять \d иль \s, \S и так далее. Задавай в явном виде. И так их проще подстраивать.

Спустя 45 секунд (30.06.2010 - 15:28) linker написал(а):
waldicom, тогда уж банальное
is_numeric($_POST['name'])

Спустя 1 минута, 50 секунд (30.06.2010 - 15:30) linker написал(а):
Цитата (DedMorozzz @ 30.06.2010 - 12:27)
Кстати по поводу "\d" не советую писать. В длинных строковых выражениях, где много чего экранирется, очень легко потерять \d иль \s, \S и так далее. Задавай в явном виде. И так их проще подстраивать.

если нужно /[3-9]/ - тогда да, чем длиннее регулярка, тем сложенее в ней разбираться. Тут палка о двух концах.

Спустя 37 секунд (30.06.2010 - 15:31) waldicom написал(а):
Цитата (linker @ 30.06.2010 - 14:28)
waldicom, тогда уж банальное
is_numeric($_POST['name'])

Цитата
ctype_digit hаs far better benchmarks thаn is_numeric.

Пусть для этого случая это не важно, но почему бы и нет?

Спустя 1 минута, 49 секунд (30.06.2010 - 15:32) DedMorozzz написал(а):
Ну я разбираюсь порой в регулярках в несколько строк. И очень просто читать то, что заданно в явном виде. А различать \S u \s - далеко не так просто, вроде выглядит похоже, а означает совершенно противоположное.

Спустя 7 минут, 11 секунд (30.06.2010 - 15:40) linker написал(а):
Цитата
ctype_digit hаs far better benchmarks thаn is_numeric.

Может когда-то так и было, сейчас все иначе (PHP 5.3)

Спустя 8 минут, 35 секунд (30.06.2010 - 15:48) waldicom написал(а):
Цитата (linker @ 30.06.2010 - 14:40)
Цитата
ctype_digit hаs far better benchmarks thаn is_numeric.

Может когда-то так и было, сейчас все иначе (PHP 5.3)

У Вас есть результаты сравнений, чтобы не выглядеть балаболом?

Спустя 10 минут, 53 секунды (30.06.2010 - 15:59) linker написал(а):
Элементарно
$s = microtime(1);
ctype_digit('883652833333333333333333333335234654236236528333333333333333333333352346365283333333333');
$e = microtime(1);
$r1 = $e - $s;
$s = microtime(1);
is_numeric('8836528333333333333333333333352346542362365283333333333333333333333523463652833333333333');
$e = microtime(1);
$r2 = $e - $s;
if ($r2 < $r1) { echo 'is_numeric better'; } else { echo 'ctype better'; }
Я не зря сделал приписку PHP 5.3, возможно в ранних версиях is_numeric работал медленнее.
P.S. 5.2.10 is_numeric тоже быстрее.
P.S. Прошу прощения, не учел факт когда is_numeric() == false, тогда ctype бысрее


_____________
пожизненный бан
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.