2016-08-24 3 views
2

Я не знаю, почему этот код не работает со мной, я много искал, но я не мог найти решение Мне просто нужно preg_match, чтобы принимать буквы, одинарные и пространство. Вот мой код:preg_match (single quot) не работает

if (!preg_match("/^[a-zA-Z\-\' ]*$/",$firstName)) { 
    $errors[] = "Invalid Name!"; 
} 

если $firstName = "abc'def" это dosen't работа! благодарит заранее.

Примечание:

Существует htmlspecialchars до проверки регулярных выражений в коде.

+1

У вас нет ни одной цены в шаблоне. Используйте ''/^ [a-zA-Z '-] * $/"' –

+0

Простите, что я забыл добавить его здесь, но все равно не работаю даже на вашем пути! @ WiktorStribiżew –

+1

Работает - http://ideone.com/o8pvWf, имеет значение '$ firstName'. –

ответ

0

Виновником является htmlspecialchars, который преобразует

' к ' (для ENT_HTML401) или ' (для ENT_XML1, ENT_XHTML или ENT_HTML5), но только тогда, когда ENT_QUOTES является задавать.

Решения:

  • Перемещение проверки регулярных выражений перед темhtmlspecialchars преобразования.

  • Используйте неэффективный /^(?:[a-zA-Z' -]|&(?:apos|#039);)*$/ шаблон, где отдельные цитируемые объекты включены

  • Decode сущности назад (с htmlspecialchars_decode($firstName,ENT_QUOTES) или html_entity_decode($firstName, ENT_QUOTES)) и использовать /^(?:[a-zA-Z' -]*$/ регулярное выражение на «простой» значение.

+0

Stribizew Довольно благодарен за вашу помощь :) –

+0

Рад, что это сработало для вас. Пожалуйста, также подумайте над тем, чтобы мой ответ оказался полезным для вас (см. [Как повысить уровень переполнения стека?] (Http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) , –

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