2015-04-05 3 views
1

Я знаком с PHP, но я совершенно новый с регулярными выражениями в PHP. Я пытаюсь выяснить, как разрешить только az, AZ, 0-9,:, (одиночная кавычка), "" (двойная кавычка), +, -,., (Запятая), &,!, *, (, а также).Двойные кавычки в регулярном выражении PHP?

Я нашел несколько рабочих примеров того, что я ищу, ЗА ИСКЛЮЧЕНИЕМ, как разрешить одиночную цитату и двойную кавычку.

Пример того, что я ищу: Здравствуйте, это только пример того, что я ищу: «Hello World!».

Я пытаюсь проверить в текстовое поле $ _POST [ «рекомендации»] с помощью:

$errors = array(); 

if(!preg_match('insert regular expression',$_POST['suggestion'])){ 
    $errors['suggestion2'] = "Invalid"; 
} 

Со всем я старался, я всегда получаю:

пример того, что я ищу, : Здравствуйте, это всего лишь пример того, что я ищу: \ "Hello Wolrd! \".

Я не понимаю, почему \ перед котировками?

+0

См. Демонстрационный файл https://regex101.com/r/oO7sB6/1 –

+0

. Повторите свой вопрос об ошибке, который вы только что опубликовали. Публикация нового вопроса разрешена только в том случае, если это другой вопрос. В противном случае вам нужно изменить свой первоначальный вопрос, чтобы он дал понять, но сначала обсудите с ответчиком, почему их ответ не работает для вас. Помогает ли RegEx в ответе на вас? Если нет, почему бы и нет? (также, удаляя слишком много вопросов, вы будете заблокированы от запроса больше - это то, как сайт работает, чтобы остановить людей, спрашивающих и удаляющих слишком много). При необходимости отредактируйте свой вопрос и добавьте то, что вы пробовали из ответа, и почему оно не сработало - просто будьте кратки и понятны. – James

+0

Что такое вывод: 'echo phpversion();'? Если это <5.4, то посмотрите здесь: http://php.net/manual/en/security.magicquotes.php И убедитесь, что у вас нет волшебных котировок – Rizier123

ответ

3

Вы можете использовать следующее регулярное выражение:

[a-zA-Z0-9:'"+.,&!*()-] 

Обратите внимание, что дефис - помещаются в конечном положении, чтобы не сформировать диапазон (и он может соответствовать буквальным -). +, *, ., ( и ) не должны быть экранированы внутри класса символов. Как правило, ^-] следует экранировать, но если они появляются в начале конечной позиции в классе символов, им это не нужно. \ должен быть экранирован в классе символов, но вы его не разрешаете.

Кроме того, если вы хотите совместить куски разрешенных символов, добавьте квантор + после класса символов: [a-zA-Z0-9:'"+.,&!*()-]+.

См. demo здесь и here.

Пример кода PHP:

$re = "/[a-zA-Z0-9:'\"+.,&!*()-]/"; 
$str = "a-zA-Z0-9:'\"+.,&!*()-"; 
preg_match_all($re, $str, $matches); 

EDIT:

Поскольку вы обновили вопрос, вот в более ранних версиях PHP information to turn off escaping double quotes. В качестве одного из вариантов вы можете перейти к .htaccess файл и установить php_flag magic_quotes_gpc Off.

+0

@Matt: Не могли бы вы принять ответ, если он сработает для вас? –

+0

Когда я попробую ваш пример, я получаю: Пример того, что я ищу: Привет, это просто пример того, что я ищу: \ "Hello World! \". Почему \ перед «? – Matt

+0

Не могли бы вы прояснить, что вы делаете? Я просто предоставил вам класс символов, который соответствует определенному подмножеству скриптов, и регулярное выражение соответствует всем символам в приведенном выше предложении, но пространство Пожалуйста, обновите свой пост или лучше опубликуйте новый вопрос, так как на него ответят. –

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