|
|
|
| Добрый день,
для безопасности получаемых данных от посетителей использую замену по шаблону:
$str = preg_replace('/[^0-9.()+-\/*%^:]/', '', $str);
/*
Пропускает только: Цифры, точку, скобки, +, -, \, *, %, ^, и двоеточие
*/
|
Понадобилось добавить исключение для слов:
bcsqrt
bcpow
round
ceil
floor
|
Как должен выглядеть шаблон с перечисляемыми допустимыми словами? | |
|
|
|
|
|
|
|
для: zetrider
(18.02.2014 в 10:37)
| |
$str = preg_replace('/[^0-9\.\(\)\+\-\/\*%\^:|bcsqrt|bcpow|round|ceil|floor]/', '', $str);
|
Думаю будет работать! | |
|
|
|
|
|
|
|
для: ladan
(18.02.2014 в 23:44)
| | Спасибо за ответ, но при таком правиле пропускает любую букву которая присутствует в словах.
Например, пропустит букву b или q | |
|
|
|
|
|
|
|
для: ladan
(18.02.2014 в 23:44)
| | во благо истории, удали свой пример регулярки, он не просто не правильный, он заразный для новичков, у которых эта загадачная конструкция выполнит то что они хотели.
не существует такого синтаксиса!!!
это равносильно этому
<?php
var_dump(preg_replace('/[bcsqrt|bcpow|round]/', '<$0>', 'durow') === preg_replace('/[bosdqrtcpwun|]/', '<$0>', 'durow')); //return bool(true)
|
обрати внимание как с легкостью слово 'durow' совпало с регуляркой [bcsqrt|bcpow|round] | |
|
|
|
|
|
|
|
для: zetrider
(18.02.2014 в 10:37)
| |
<?php
$str = 'round_l(12)';
echo preg_replace('@(bcsqrt|bcpow|round|ceil|floor)\K|[^0-9.()+-/*%^:]@', '', $str);
|
Output for 4.4.9, 5.2.4 - 5.6.0alpha2
round(12)
подходит?
если вдруг нужно пропускать именно как слова то окантуй первое условие \b тоесть
@\b(bcsqrt|bcpow|round|ceil|floor)\b\K|[^0-9.()+-/*%^:]@
|
| |
|
|
|
|
|
|
|
для: duhon
(24.02.2014 в 14:34)
| | Вот как оказалось.. Спасибо! Очень помогли.
Для меня подойдет первый, более мягкий вариант на проверку.
K - это модификатор? Что он означает? | |
|
|
|
|
|
|
|
для: ZetRider
(25.02.2014 в 09:39)
| | это метосимвол http://www.php.net/manual/ru/regexp.reference.escape.php самый последний абзац
особенно удобно в таких случаях
echo preg_replace('/start\K delete/', '', 'text start delete and delete othe'); //Output for 4.4.9, 5.2.4 - 5.6.0alpha2 'text start and delete othe'
в твоем случае я сделал просто но не изящно, при нахождении названия функций ты удаляеш пустоту. Звучит странно, но зато работает :)
З.Ы. кстати в регулярке которую ты изначально написал а я модифицировал заложен один нюанс. Точно не нужно экранировать тире/минус? та как в середине символьного класа это обозначает диапазон значений от знака + до / в ascii таблице (тоесть твоя регулярка дополнительно пропускат запятые). И еще в описании ты возможно перепутал, пропускает / (слеш) но не \ (бекслеш) | |
|
|
|
|
|
|
|
для: duhon
(25.02.2014 в 17:02)
| | Спасибо за решение и объяснение, буду разбираться. | |
|
|
|