2016-04-20 2 views
0

я использую следующее регулярное выражение для проверки ввода для anyting другого, то допустимые символы ... (A-Za-z0-9 точку, запятую, тире и singlequote и бр тег)Как перевернуть регулярное выражение?

<?php 

$regex_char_appearance = '/([A-Za-z0-9 \-\.\,\']|(<br>))/'; 

?> 

Я пытаюсь создать регулярное выражение для очистки ввода пользователя. Я просто не могу заставить его работать так, пробовали разные вещи, как ...

<?php 

    $regex_char_appearance = '/(?!<br>)([^A-Za-z0-9 \-\.\,\'])/'; 

    $regex_char_appearance = '/([^A-Za-z0-9 \-\.\,\']|[^(<br>)])/'; 

    //remove anything other then alphabetic and allowed 
    $post_char_appearance = preg_replace($regex_char_appearance , '' , $post_char_appearance); 

?> 

поэтому цель состоит в том, чтобы удалить что-нибудь другое, то A-Za-z0-9, точка, запятая, тире, singlequote и тег br для вывода с preg_replace.

Может кто-нибудь помочь мне создать совместное задание?

+0

Я думаю '[^ A-Za-z0-9., '- ] 'должно быть достаточно, чтобы * удалить что-либо другое, а затем a-zA - ** Z ** 0-9, точку, запятую, тире и требование одиночного запроса *. Что такое '
' здесь? Вы хотите сопоставить что-либо другое, кроме '
'? –

+0

мой плохой .... и
разрешено также .... но не < or >. –

+0

Итак, '' ~ [^ A-Za-z0-9., '-] ~' 'должен работать тогда. Не так ли? –

ответ

0

Вы можете сопоставить ваши запрещенные символы с [^A-Za-z0-9.,'-] (отрицательный character class, соответствующий любому символу, но указанному в классе).

Чтобы сохранить br теги нетронутыми, матч и захватить его с парой неэкранированных скобок (а grouping construct(...)) и восстановление с backreference$1:

$regex_char_appearance = '~(<br\s*/?>)|[^A-Za-z0-9.,'-]~'; 
$post_char_appearance = preg_replace($regex_char_appearance, '$1' , $post_char_appearance); 

См regex demo

Обратите внимание, что [A-z] делает не только соответствуют всем буквам ASCII, см. больше об этом в Why is this regex allowing a caret?

Смежные вопросы