Регулярное выржение отсевающее все кроме введенного

12
PN
На сайте с 01.05.2008
Offline
113
1691

Хочу разрешить пользователям вставлять штмл таблицы, но их нужно парсить, и чистить.

Пишу регилярное выражения но не пашет. Цель - очистить текст от всего кроме

table|td|th|tr|width|border|cellspacing|cellpadding|scope|row|align|center|right|left " = и цифр


preg_replace("/^(table|td|th|tr|width|border|cellspacing|cellpadding|scope|row|align|center|right|left|)[0-9\=\"]/i","",$s[1]);

preg_replace("/^(table|td|th|tr|width|border|cellspacing|cellpadding|scope|row|align|center|right|left|)[0-9\=\"]/i","",$s[1]);

Но оно не пашет уже закалупался, помогите плиз.

D0
На сайте с 15.12.2009
Offline
59
#1

Как именно не пашет? Пробуй частями составлять. Сначала основные теги, потом все остальное.

Жизнью правит случай, а не мудрость.
Tortemon
На сайте с 09.07.2011
Offline
62
#2

Вы же наоборот заменяете то что не надо заменять.

Веб и мобильная разработка [PHP, JS, Golang, Python, Java] (/ru/forum/998064)
PN
На сайте с 01.05.2008
Offline
113
#3

Не пашет - выдавая все, авбсолютно все.

Пробовал поштучно

preg_replace("/[^width]/i","",$s[1]);

в итоге вывело все юуквы из списка ... width iiiddd thdw и т.п.

Вот какую таблицу вставляю пробно:

<table width="300" border="0" cellspacing="0" cellpadding="0" calo="s" onlclick="alert('hack');">

<tr>

<th scope="row">&nbsp;</th>

<td>а</td>

<td>о</td>

</tr>

<tr>

<th onClick="alert('fff');" scope="row">а</th>

<td>&nbsp;</td>

<td>о</td>

</tr>

<tr>

<th scope="row">&nbsp;</th>

<td>п</td>

<td>р</td>

</tr>

</table>

ddddddddddddd

Prosto_niki добавил 18.07.2011 в 02:43

Tortemon:
Вы же наоборот заменяете то что не надо заменять.

А как правильно?

Tortemon
На сайте с 09.07.2011
Offline
62
#4

О функции preg_replace читали вообще?

<?php
$string = 'The quick brown fox jumped over the lazy dog.'; //Где заменяем
$patterns = array(); //Что заменяем
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array(); //На что заменяем
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>

Результат приведенного примера выше будет таким. The bear black slow jumped over the lazy dog. Но т.к у нас в условии не, необходимо поставить квадратные скобки.

PS. Вместо звездочек квадратные скобки.

siv1987
На сайте с 02.04.2009
Offline
427
#5

Эта фигня и не будет работать.

^ - в начале выражения означает начало строки. Спецсимволом отрицания "все символы (не буквы) кроме" становиться в начале символьного класса (в квадратные скобки).

Отрицание шаблона кажется нету.

Как вариант можно попробовать и доработать так

"/.*?(table|td|tr)/", "$1"

D0
На сайте с 15.12.2009
Offline
59
#6

Ту просто надо поэтапно все делать и правильно условие составить

на самом деле не очень сложно.

Вот например я всегда делаю на яваскрипте, он быстрее, а потом на пхп перенести можно.



<script type="text/javascript" >
<!--
// input control
function chcol(){
var ls=document.getElementById('ls');
var ls_zona=ls.value;
var int = /[^\d]/; // исключить цифры
// если находит совпадение (любой символ, кроме цифр), то значение поля обнуляется
if(ls_zona.search(int) !== -1){
ls.value = '';
}
//-->
</script>

<input name="ls" id="ls" type="text" size="5" maxlength="5" onkeyup="chcol()" />

Обрати внимание на условие. как не просто для понимания

S
На сайте с 23.05.2004
Offline
315
#7

Не регулярка, но тоже можно использовать, основное по крайней мере должно отсечь.

http://pastebin.com/dbSZuH6y

Это просто подпись.
PN
На сайте с 01.05.2008
Offline
113
#8
Tortemon:
О функции preg_replace читали вообще?

<?php

$string = 'The quick brown fox jumped over the lazy dog.'; //Где заменяем
$patterns = array(); //Что заменяем
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array(); //На что заменяем
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>


Результат приведенного примера выше будет таким. The bear black slow jumped over the lazy dog. Но т.к у нас в условии не, необходимо поставить квадратные скобки.

PS. Вместо звездочек квадратные скобки.

Писать все возможные варианты - глупо и не реально. В ЮТФ7 яваскрипы по прежнему будутут работать. Мне нужно только дозволенные слова пропустить

D0
На сайте с 15.12.2009
Offline
59
#9

я вот сейчас попробовал вдуматься и понял. что тут условие задачи не очень то грамотно составлено. Наверно не получится таким образом обработать, потому что в итоге получится каша из символов.

Единственное, что можно попробовать, так это предварительный просмотр.

Юзер вставляет код в поле, и если скрипт находит что-то лишнее, то оповещает. а перебирать строку с такой регуляркой не по-человечески как-то

PN
На сайте с 01.05.2008
Offline
113
#10

Ну почему-же каша. Лимит символов и вывод толкьо width="цифра"

width загнаять в ИЛИ table|td|th|tr|width|border|cellspacing|cellpadding|scope|row|align|center|right|left

по идее не сложно. Но я прсто сам preg_match условия не сильно знаю

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий