Помощник
|
Фильтр |
unnormal
|
Сообщение
#1
|
||
|
|
||
|
|||
Mulder_hb |
26.8.2010, 17:26;
Ответить: Mulder_hb
Сообщение
#2
|
|
[PHP]preg_match_all('(\w+)', $subject, $result);[/PHP]
|
|
|
unnormal
|
Сообщение
#3
|
|
Конечно спасибо, но вроде оно удалит только спцсимволы \r \n \t, а вот от остальных (,?[]{}()) как избавиться?
|
|
|
Apay |
26.8.2010, 18:17;
Ответить: Apay
Сообщение
#4
|
|
[php]$dest = preg_replace( '#[^\\w\\d]+#', '', $source );[/php] длина поменьше километра :rolleyes:
Mulder, preg_match - только проверяет |
|
|
Mulder_hb |
26.8.2010, 20:49;
Ответить: Mulder_hb
Сообщение
#5
|
|
Конечно спасибо, но вроде оно удалит только спцсимволы \r \n \t, а вот от остальных (,?[]{}()) как избавиться? Читать до полного просветления. Mulder, preg_match - только проверяет Я ведь не зря поставил третий аргумент в функции, как вы думаете? #[^\\w\\d]+# Вам тоже не мешало бы изучить, что значит \w и ^. |
|
|
Apay |
26.8.2010, 21:41;
Ответить: Apay
Сообщение
#6
|
|
Mulder, прежде чем писать, прочтите доки, для особо сообразительных поясняю
Я ведь не зря поставил третий аргумент в функции, как вы думаете? в третий аргумент заносится массив совпадений, для единичного случая совпаденияВам тоже не мешало бы изучить, что значит \w и ^. '#[^\\w\\d]+#' означает "все не-буквы и не-цифры"
|
|
|
Mulder_hb |
26.8.2010, 22:45;
Ответить: Mulder_hb
Сообщение
#7
|
|
Итак:
1. \w == [a-zA-Z_0-9] , т.е. - \w уже содержит в себе все буквы и все цифры плюс знак подчеркивания. \w\d это масло масленое. в третий аргумент заносится массив совпадений, для единичного случая совпадения А теперь прочтите вопрос автора и догадайтесь, что попадет в карман с индексом 1. Надеюсь вам не надо говорить, что попадет в карман с индексом 0? '#[^\\w\\d]+#' означает "все не-буквы и не-цифры" И где ж тут записан пресловутый отрицательный класс? Ваша запись означает: "в начале строки идет либо буква, либо цифра, либо знак подчеркивания, потом идет цифра. Вся эта конструкция повторяется минимум один раз." Т.е. вы сделаете автору медвежью услугу, удалив то, что нужно оставить и оставив то, что нужно удалить. А вот то, что вы озвучили "все не-буквы и не-цифры", записывается так: \W К слову отрицательный класс, записывается вот так [^<>] И если вы так хотите его применить (зачем если есть соответствующий класс?), то запись будет выглядеть так: '/[^<\w>]+/' Так что все таки доки нужно читать далеко не мне... |
|
|
Apay |
27.8.2010, 8:22;
Ответить: Apay
Сообщение
#8
|
|
с \\d - да, наверное лишнее, но не помешает :)
'/[^<\w>]+/' - содержит не только буквы и цифры, но и знаки <> не надо путать '#^[\\w]+#' и '#[^\\w]+#' - как говорится найдите отличия, к слову '#[^\\w]+#' и '#\\W+#' - одно и то же простой результат маленького тестика: ваше решение [php]preg_match('\w+', '12345@#$qwer<t_fgs>fsf%^$%^$%', $result ); print_r( $result );[/php] Warning: preg_match(): Delimiter must not be alphanumeric or backslash in ~/a.php on line 3 ставим упущенные символы[php]preg_match('#\w+#', '12345@#$qwer<t_fgs>fsf%^$%^$%', $result ); print_r( $result );[/php] Array( [0] => 12345 ) неверно! теперь мой вариант, так не понравившийся вам [php]echo preg_replace( '#[^\\w\\d]+#', '', '12345@#$qwer<t_fgs>fsf%^$%^$%' );[/php] 12345qwert_fgsfsf все верноставим ваш вариант рег.выражения [php]echo preg_replace( '/[^<\w>]+/', '', '12345@#$qwer<t_fgs>fsf%^$%^$%' );[/php] 12345qwer[COLOR=Red]<[/COLOR]t_fgs[COLOR=Red]>[/COLOR]fsf большой опстак кому нужно доки читать? ответ ясен. один совет на будущее: прежде чем что-то утверждать, протестируйте хотя бы, если знаний не хватает, сможете избежать проблем (форум тут нипричем) |
|
|
Mulder_hb |
27.8.2010, 10:02;
Ответить: Mulder_hb
Сообщение
#9
|
|
с \\d - да, наверное лишнее, но не помешает Ну да, дважды проходиться по строке с одним и тем же шаблоном. Может давайте перечислим все классы, которые подходят под понятие "все буквы и цифры". Не помешает? Конечно не помешает, особенно вам спасибо скажут те несколько десятков тысяч уников, которые будут посещать ваш сайт и наслаждаться тем, как все висит и тормозит. '/[^<\w>]+/' - содержит не только буквы и цифры, но и знаки <> Тут сглупил. Не тот пример взял из документации. Отрицательный класс записан верно. НО!. Это же классический говнокод. Мало того, что масло масленое вы прикрываете туфтой о том, что и так работает (у Попова тоже все работает), так еще и используйте отрицательный класс там, где он попросту не уместен. Автор что просил? Избавить его от километрового регэкспа. А вы ему его предлагаете оставить. Итак, у меня одна ошибка, обнаруживаемая на стадии разработки: preg_match_all('/\w+/s', $subject, $result); У вас две фундаментальных ошибки, обнаруживаемые только при прочтении гневных писем ваших потенциальных клиентов и приглашения кодера со стороны, потому что тот, кто пишет подобный код не может понять, где слабое звено в цепи. Вместо $dest = preg_replace( '#[^\\w\\d]+#', '', $source ); Надо и не просто надо, а необходимо писать: $dest = preg_replace( '/\W+/', '', $source ); Я думаю, ошибку лучше обнаружить на стадии разработки, чем на стадии промышленного использования? А документацию я читаю всегда, когда нет возможности на месте проверить свой код. А вот вы, когда вам явно указывают на ошибки, продолжаете затыкать уши и закрывать глаза. |
|
|
Apay |
27.8.2010, 10:22;
Ответить: Apay
Сообщение
#10
|
|
у меня не ошибка (все работает)
'12345@#$qwer<t_fgs>fsf%^$%^$%' => '12345qwert_fgsfsf' а у вас ошибка (выдает не то что требуется)'12345@#$qwer<t_fgs>fsf%^$%^$%' => [COLOR=Red]'12345'[/COLOR] это то что имеем в сухом остатке, остальное - холиварыкстати, я всегда использую констркуции типа '#[^\\w]+#' вместо '#\\W+#' потомучто требуется исключать, и в первое очень просто дописать что еще нужно исключить, хотя это дело привычки Это же классический говнокод. Мало того, что масло масленое вы прикрываете туфтой о том, что и так работает (у Попова тоже все работает), так еще и используйте отрицательный класс там, где он попросту не уместен. говнокод - это то что не работает (ваше), и прикрывать ее всякой туфтой - нехорошо. а у попова есть места логически неверные (неработающие)Я думаю, ошибку лучше обнаружить на стадии разработки, чем на стадии промышленного использования? какую ошибку? где? укажите ее. все ведь работает
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Яндекс грохнул под фильтр совершенно нормальный сайт | 6 | OldSpice | 4248 | 19.10.2017, 12:58 автор: Mukis |
|
ModX фильтр Ditto | 7 | iodjin | 2489 | 2.3.2017, 14:56 автор: mmkulikov |
|
Фильтр за партнерки | 2 | Ирина 55 | 1799 | 2.10.2016, 23:45 автор: Ирина 55 |
|
CNScoin - мошенники и кидалы! Чёрная ПП за которую получите фильтр! | 0 | Adriano_123 | 2323 | 24.7.2016, 14:36 автор: Adriano_123 |
|
Фильтр без БД | 17 | fisherokspb | 8597 | 20.1.2014, 18:37 автор: -HTMLandPHP- |
Текстовая версия | Сейчас: 26.4.2024, 1:01 |