PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Необходимо в preg_match_all добавить разрешение на html-спецсмивол одинаронй кавычки ' (&#039 ;)
curiosity
Отправлено: 17 Июля, 2018 - 11:21:18
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Необходимо в preg_match_all добавить разрешение на html-спецсмивол одинаронй кавычки ' (&#039 ;)
*(!!!Внимание, в
Цитата:
&#039 ;
- везде пишу лишний пробел перед ";", потому как редактор форума режет!..)

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $value = "O'Brain";
  4.  
  5. //Все двойные и одинарные кавычки будут заменять на &#039 ;
  6. $value = preg_replace("/(\")|(\')|(`)/", '&#039 ;', $value);
  7.  
  8. echo $value; //O&#039 ;Brain
  9. echo "\n";
  10.  
  11. //?Как в эту регулярку добавить разрешение на спецсимвол html &#039 ;
  12. $result = (bool) preg_match_all('/^[A-Za-zА-Яа-яЁё\s]+$/u', $value);
  13. if (!$result) {
  14.    echo 'Поле заполнено некорректно!';
  15. } else {
  16.    echo 'Корректно!';
  17. }
  18.  
  19.  

(Отредактировано автором: 17 Июля, 2018 - 13:04:28)

 
 Top
Строитель Модератор
Отправлено: 17 Июля, 2018 - 12:56:37
Post Id



Участник


Покинул форум
Сообщений всего: 1314
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 54 раз(а)




curiosity, попробуйте так:

PHP:
скопировать код в буфер обмена
  1. '/^[A-Za-zА-Яа-яЁё\s]+|(?:&#039 ;)+$/u'
Рузумеется без лишнего пробела.
 
 Top
curiosity
Отправлено: 17 Июля, 2018 - 13:15:22
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Цитата:
PHP:
скопировать код в буфер обмена
  1. '/^[A-Za-zА-Яа-яЁё\s]+|(?:&#039 ;)+$/u'
Разумеется без лишнего пробела.

К сожалению, такой вариант не правильный.
Теперь эта регулярка будет пропускать не только &#039 ;, но и все подряд.
А потому результат всегда положительный...

(Отредактировано автором: 17 Июля, 2018 - 13:16:29)

 
 Top
Строитель Модератор
Отправлено: 17 Июля, 2018 - 15:20:00
Post Id



Участник


Покинул форум
Сообщений всего: 1314
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 54 раз(а)




curiosity, вроде работает, пробелы только не забудьте по убирать внутри шаблона.
Спойлер (Отобразить)
UPD: Чуть подкорректировал: Демо
 
 Top
Мелкий Супермодератор
Отправлено: 17 Июля, 2018 - 16:11:25
Post Id



Активный участник


Просматривает форум
Сообщений всего: 11721
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 588 раз(а)




Скобки слегка не там:
CODE (regex):
скопировать код в буфер обмена
  1. /^(?:[A-Za-zА-Яа-яЁё\s]+|')+$/u


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

Но в любом случае внимательнее с html-сущностью. Захотите как-нибудь отправить куда не в html - не забудьте заменить обратно.


-----
PostgreSQL DBA
 
 Top
curiosity
Отправлено: 17 Июля, 2018 - 16:28:36
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Строитель пишет:

CODE (htmlphp):
скопировать код в буфер обмена
  1. /^[\pL\s]+(?:[\pL\s]*(?:&#039 ;)*)*$/u



Строитель, огромное спасибо! Это действительно даже больше, чем мне нужно было.
особенно был приятно удивлен конструкцией:
Цитата:
[\pL\s]

Еще раз спасибо вам и этому сообществу!
(Добавление)
Мелкий пишет:
Скобки слегка не там:
Проще было бы кстати инвертировать логику, добавить кавычки в символьную маску и

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

Здесь я лишь указал урезанный код для примера.

Мелкий, но спасибо вам за правильный совет!
Приятно.
 
 Top
Строитель Модератор
Отправлено: 17 Июля, 2018 - 16:36:36
Post Id



Участник


Покинул форум
Сообщений всего: 1314
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 54 раз(а)




curiosity пишет:
особенно был приятно удивлен конструкцией
\pL - это упрощённо говоря буквы (латиница). А если дописать к шаблону модификатор u, то последовательность символов (иначе говоря - символьный класс) \pL будет соответствовать ещё и кириллице. \s - это символьный класс пробельных символов. Что-то ещё разъяснить?
 
 Top
curiosity
Отправлено: 17 Июля, 2018 - 16:59:10
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Строитель пишет:
\pL - это упрощённо говоря буквы (латиница). А если дописать к шаблону модификатор u, то последовательность символов (иначе говоря - символьный класс) \pL будет соответствовать ещё и кириллице. \s - это символьный класс пробельных символов. Что-то ещё разъяснить?

Спасибо! Благодаря вам, теперь стал чуть больше понимать в такой не простой теме под названием "Regular expressions".

Но если вам не сложно, еще вот этот момент, чтоб закрепить.
Цитата:
(?:&#039 ;)

Смотря в мануалы, я вижу:
Цитата:
(?:шаблон) - группировка как и '( )', но без обратной ссылки.

Вот это "без обратной ссылки" мне никак не дается.
Интуитивно понимаю, что надо еще несколько раз прочесть мануалы, чтоб понять смысл вот этого "без обратной ссылки" и в чем принципиальная разница между ( ) и (?:шаблон).

И еще, я правильно понял, если необходимо разрешить еще какие-либо спецсимволы, то за *(?:&#039 ;) добавляю еще одну группу например *(*(?:"))

(Отредактировано автором: 17 Июля, 2018 - 17:00:48)

 
 Top
Строитель Модератор
Отправлено: 17 Июля, 2018 - 17:02:25
Post Id



Участник


Покинул форум
Сообщений всего: 1314
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 54 раз(а)




curiosity пишет:
в чем принципиальная разница между ( ) и (?:шаблон)
Разница в том, что обычные круглые скобки помимо группировки, выполняют ещё и "захват" найденных соответствий (сравните результирующие массивы - в случае с простыми круглыми скобками, элементов в массиве будет больше):
Спойлер (Отобразить)
Обратите внимание - первый элемент второго массива будет соответствовать полному вхождению шаблона, а второй элемент будет соответствовать только той части шаблона, которая была записана в круглых скобках.

Ещё одна особенность захватывающих скобок - это возможность ссылаться на т.н. "подмаски" прямо внутри шаблона:
Спойлер (Отобразить)
В этом примере последовательность символов \1 будет ссылаться на захваченное (в случае соответствия шаблону) значение, соответствующее выражению [a-z]+. Нумерация ссылок на подмаски начинается с единицы, и считается слева направо. Предыдущий пример можно записать с двумя ссылками на подмаски:
Спойлер (Отобразить)
Номер ссылки на подмаску соответствует номеру ключа в результирующем массиве.
 
 Top
Строитель Модератор
Отправлено: 17 Июля, 2018 - 23:39:28
Post Id



Участник


Покинул форум
Сообщений всего: 1314
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 54 раз(а)




curiosity пишет:
И еще, я правильно понял, если необходимо разрешить еще какие-либо спецсимволы, то за *(?:&#039 ;) добавляю еще одну группу например *(*(?:"))
Теоретически - да. А практически - в регулярных выражениях нужно чётко понимать, в какой последовательности символы должны находиться в строке для успешного поиска соответствий regexp-шаблону. Это наиболее важный момент, который нужно чётко себе представлять. Иначе выражаясь, для регулярных выражений важна позиция символов в строке.
(Добавление)
В функции preg_replace() ссылки на подмаски записываются ввиде последовательности символов, состоящих из знака доллара $, и номера подмаски, например (обязательно в одинарных кавычках): '$1' - ссылка на первую группу; '$2' - ссылка на вторую группу (и т.д.)
Спойлер (Отобразить)
 
 Top
curiosity
Отправлено: 18 Июля, 2018 - 00:34:35
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Строитель пишет:
круглые скобки помимо группировки, выполняют ещё и "захват" найденных соответствий

Благодаря вам, думаю, я словил "нить" о том, что такое "без обратной ссылки" и "захват".

А вот здесь
Строитель пишет:
Ещё одна особенность захватывающих скобок - это возможность ссылаться на т.н. "подмаски" прямо внутри шаблона

Я уже, честно говоря, потерялся...
Видимо устал, да и знаний в этой теме явно не хватает.
Но после ваших ответов и примеров, появилось приятное желание найти время, чтоб детальней и более структурно начать изучать мануалы по reg exp.

Еще раз спасибо вам, за время и внимание уделенное моим вопросам.

P.S.
Буду еще более благодарен, если дадите ссылку на человеко-понятный талмуд по этой тем.
Пока все, что нагуглил, достаточно сухо и концентрированно, а иногда и вовсе непонятно.
 
 Top
Строитель Модератор
Отправлено: 18 Июля, 2018 - 07:21:04
Post Id



Участник


Покинул форум
Сообщений всего: 1314
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 54 раз(а)




curiosity, скачайте книгу "Регулярные выражения 3-е издание" Джеффри Фридл. В ней описаны все тонкости.
 
 Top
curiosity
Отправлено: 18 Июля, 2018 - 10:57:28
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Строитель пишет:
curiosity, скачайте книгу "Регулярные выражения 3-е издание" Джеффри Фридл. В ней описаны все тонкости.

Так и сделаю. Благодарю!
 
 Top
v
Отправлено: 01 Августа, 2018 - 10:22:49
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Люди добрые, помогите с регуляркой, я ее ни как не могу понять((
НУжно строку проверить на соответсвтие:
строка может быть .11101. или .00112.00212А.00002АВ.

главное впереди 5 цифр а к конце может быть пару букв
 
 Top
Строитель Модератор
Отправлено: 01 Августа, 2018 - 11:17:10
Post Id



Участник


Покинул форум
Сообщений всего: 1314
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 54 раз(а)




v пишет:
главное впереди 5 цифр а к конце может быть пару букв
А с точками как быть?
Спойлер (Отобразить)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB