«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/09/20 19:05:43  №1267370 1
Ответы: >>1269793
Аноним 2018/09/20 19:32:39  №1267386 2
Задача "Опечаточник" по госконтрактам (одновременное выделение в квадратные скобки+замена англ на рус)
https://ideone.com/3M9637

Возник следующий вопрос.
Здесь я для того, чтобы проверять букву в большом и малом регистре сделал пару из заглавной и прописной в массиве 'O'=>'O','o'=>'о'.

В JS я бы решил этот момент через колбэк в реплейс типа такого

string.replace(/'[Oo]'/gi, x=> x==x.toLowerCase()?'русская о':'руccкая О');

Как в пыхе решать такие ситуации без создания пар выборов в объекте, массиве, а на стадии матча, в зависимости от матча, на лету?
Ответы: >>1267873 >>1269793
Аноним 2018/09/21 09:40:45  №1267640 3
Анчоусы а стоит ли перекатыватся на линукс или нет, раз кодите на пыхе? Какую ОС вы юзайте?
Аноним 2018/09/21 11:06:36  №1267703 4
>>1267640
Планирую перекатиться, ибо за винду кмк могут не взять на работу особо упоротые ЖМУПИНУСЫ.

Хоть и не вижу ничего плохого в попенцорсе перспектива тратить время ЕЩЕ И НА ЭТО удручает. С другой стороны мб освою быстро.
Ответы: >>1269793
Аноним 2018/09/21 13:52:56  №1267805 5
Оп, а почему ты советуешь учить паттерны после выполнения заданий, в которых, по хорошему, надо использовать некоторые паттерны?
Ответы: >>1269793
Аноним 2018/09/23 05:08:46  №1268596 6
Аноны, сколько разы можно юзать знак ? в URL'e страницы?
Ответы: >>1268609 >>1269790
Аноним 2018/09/23 08:19:03  №1268697 7
maxresd.jpg (156, 1280x720)
720x1280
Сделал граммар нази и опечаточники. Итак.
1) Граммар нази. Тут у меня есть ощущение, что я как-то не аутентично использую функции для работы с регулярками + там же надо делать исправление больших букв и я его добавил отдельным правилом т.е. не оче умно. Но т.к. я уже долго в этом вожусь - оставил как есть.
Задача: https://ideone.com/OW5uJV
2) Опечаточники. Тут ты, ОП, в спойлере у задачки оставил примеры текстов - которые добавляют дополнительные условия, т.е. в слове может быть несколько опечаток, или англ.символы могут идти подряд, что заставляет переписывать регулярки и код. Кароче пока тоже оставил как есть.
Задача: https://ideone.com/KmRlPx
P.S. В общем мне нужен пример решения, хочется двигаться дальше. ОП'чик скинь мне на мыло vovchenkoal@yandex.ru или телегу @y0urbe3tfr1end

Ответы: >>1268731 >>1269790
Аноним 2018/09/23 09:18:59  №1268731 8
>>1268697
Эти задачи решались 1000 раз, попробуй загуглить примеры по названиям функций/комментариям/ключевым словам. В гугле не забудь добавить приставку site:ideone.com, если ничего не нашлось пробуй без неё.
Ответы: >>1269790
Аноним 2018/09/23 13:44:46  №1268987 9
maxresd.jpg (156, 1280x720)
720x1280
Дублирую из предыдущего треда.
Сделал граммар нази и опечаточники. Итак.
1) Граммар нази. Тут у меня есть ощущение, что я как-то не аутентично использую функции для работы с регулярками + там же надо делать исправление больших букв и я его добавил отдельным правилом т.е. не оче умно. Но т.к. я уже долго в этом вожусь - оставил как есть.
Задача: https://ideone.com/OW5uJV
2) Опечаточники. Тут ты, ОП, в спойлере у задачки оставил примеры текстов - которые добавляют дополнительные условия, т.е. в слове может быть несколько опечаток, или англ.символы могут идти подряд, что заставляет переписывать регулярки и код. Кароче пока тоже оставил как есть.
Задача: https://ideone.com/KmRlPx
P.S. В общем мне нужен пример решения, хочется двигаться дальше. ОП'чик скинь мне на мыло vovchenkoal@yandex.ru или телегу @y0urbe3tfr1end
Ответы: >>1268996
Аноним 2018/09/24 22:25:06  №1269790 10
ОП не пропал, просто сейчас мало времени и много работы. Думаю, это временно (как и большинство вещей в жизни).

>>1268731

Искать лучше в архиве тредов: phpclub.tech

>>1268697
>>1268987

> 1) Граммар нази.
Лучше было бы не переделывать регулярки программно, а сразу написать их в нужном виде. Это облегчит восприятие кода и не надо будет его разбирать, чтобы понять, как они трансформируются.

Читать выражения вроде $rule[2] не очень удобно, потому массив можно разобрать на переменные вручную или конструкцией list:

list($regexp, $replace, $comment) = $rule;

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

А так, сделано хорошо.

> 2) Опечаточники.

Конечно, в слове может быть несколько замененных букв, почему нет?

Код можно было упростить, если разбить текст на слова, определить язык слова (по первой букве например или как-то еще) и искать в нем все буквы другого алфавита. Заодно можно было бы найти слова с несколькими опечатками.

Готового примера решения нет, другие решения можно поискать на phpclub.tech, там есть поиск.

>>1268596

Это из тестового задания? Теоретически, много. Почитай урок про структуру URL: https://github.com/codedokode/pasta/blob/master/network/urls.md

Знак вопроса впоне может встретиться в query string и в якоре неограниченное число раз. Однако, в некоторых случаях длина URL может быть ограничена браузером или веб-сервер может отказаться принимать слишком длинный URL. Например, апач в конфигурации по умолчанию, если не путаю, имеет лимит в районе 2000 байт.
Ответы: >>1269803
Аноним 2018/09/24 22:26:12  №1269793 11
>>1267386

> Задача "Опечаточник"
Для замены тут не требуются регулярки, можно было использовать strtr() с массивом. Также, ты ищешь только латинские буквы, но надо искать слова из букв разных алфавитов. Проще всего сделать так: разбить текст на слова и для каждого слова определить язык первой буквы и проверить наличие букв другого алфавита.

Ну или сделать регулярку, ищущую слова из букв разных алфавитов.

> Здесь я для того, чтобы проверять букву в большом и малом регистре сделал пару из заглавной и прописной в массиве 'O'=>'O','o'=>'о'.

Тут проще всего так, потому что маленькие и большие буквы не эквивалетны. Латинская H похожа на букву кириллицы, а h - уже нет. Аналогично B/b - они похожи на буквы в/ь.

>>1267805

Какие паттерны и где надо использовать? Паттерны сложная штука и без опыта их учить смысла мало. Да и объясняются они плохо - попробуй, объясни начинающему, зачем нужна фабрика, когда объекты можно создавать через new.

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

>>1267703

Я дебиан использовал - работает хорошо, хотя конечно без гугла и залезания в конфиги не обошлось (ну, мне не привыкать).

>>1267370

Для пользователей - не забудь про хеширование и соление паролей.

Идея хранить содержимое теста в виде JSON мне не очень нравится, так как не будут работать внешние ключи (например, на выбранный вариант ответа) и не контролируется структура содержимого - а это значит, там быстро начнут накапливаться ошибки. Ну и структура никак не документирована, и глядя на базу, будет трудно ее разобрать.
Ответы: >>1269861
Аноним 2018/09/24 23:17:19  №1269803 12
В старом треде проверил посты с 20 сент. по сегодня: >>1269790 - зайдите и посмотрите, наверняка ваша задачка проверена.

Кстати, любопытная ссылка: правила выбора формы слова в зависимости от числа (1 человек, 2 человека, 5 человек) в разных языках: http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html

Анон с TDG, интересная штука, попоробую посмотреть позже.
Аноним 2018/09/25 00:51:19  №1269810 13
>>1269803
https://ideone.com/Grtrs6
В который раз переделал задачу с текстовыми/числовыми вопросами. Проверьте, плз.

У меня возникли глупенькие вопросы.

1. Тайп-хинты на вход и выход, нужно стараться использовать везде где есть функции?

2. Как перехватить с помощью try-catch, ошибку возникшую из-за неправильно переданного типа? Заменить тайп-хинт на проверку внутри функции, которая будет выбрасывать исключение?

3. Решаю сейчас ООП-будильник, потом нужно будет решать Вектор или эти задачки взаимозаменяемые?
Ответы: >>1269863 >>1270393
Аноним 2018/09/25 07:30:17  №1269861 14
>>1269793
>>1269803
>Идея хранить содержимое теста в виде JSON мне не очень нравится, так как не будут работать внешние ключи (например, на выбранный вариант ответа) и не контролируется структура содержимого - а это значит, там быстро начнут накапливаться ошибки
Сами вопросы хранить в отдельной таблице( один(Тест) ко многому) и варианты ответа то же в отдельной таблице(один(Вопрос) ко многому)
Так что ли?
Ответы: >>1269864 >>1270393
Аноним 2018/09/25 09:39:46  №1269926 15
уныние.jpg (74, 1895x1048)
1048x1895
Мне надо сайты для бюро ритуальнных услуг делать.
Аноним 2018/09/26 01:35:54  №1270393 16
>>1269926

Хороший повод получше освоить CSS. Формы можно делать так:

<div class="f-row">
<div class="f-label">...</div>
<div class="f-widget">...</div>
</div>

Выровнять f-label/f-widget горизонтально можно с помощью display: inline-block, float, display: table, flexbox, и наверно как-то еще. Не забудь предусмотреть область для показа ошибок.

>>1269861

Да, логично сделать таблицу для вопросов и для вариантов ответов (для тех вопросов, где они есть). Вопросы бывают разных типов с разными полями - и есть несколько паттернов наследования таблиц для их реализации.

>>1269810

> https://ideone.com/Grtrs6

В общем, хорошо. Хотя, мне кажется, лучше бы если за определение числа баллов отвечал бы объект-вопрос. Он ведь знает правильный и почти правильный ответ, число баллов, наверняка может и сам посчитать сколько баллов полагается за ответ. Плюс, можно было бы сделать разные алгоритмы определения числа баллов для разных вопросов. Но твой вариант тоже годится.

> 1. Тайп-хинты на вход и выход, нужно стараться использовать везде где есть функции?
Да, чем больше тайп-хинтов, тем лучше. Они документируют код, он становится понятнее, и позволяют раньше обнаруживать ошибки в программе.

> 2. Как перехватить с помощью try-catch, ошибку возникшую из-за неправильно переданного типа?

Вообще, при неправильном типе поведение зависит от версии PHP. Дело в том, что в PHP, кроме исключений, есть еще "ошибки": notice, warning, fatal error, которые не являются исключениями и не ловятся try/catch (но ловятся при желании специальным обработчиком ошибок). Они по умолчанию пишутся в лог, могут выводиться на экран, и могут завершать или не завершать скрипт (в зависимости от уровня ошибки). Информацию можно поискать тут: http://php.net/manual/ru/book.errorfunc.php

Немного про них написано тут: http://anton.shevchuk.name/php/php-for-beginners-error-handling/

Некоторые фреймворки просто преобразовывают их в исключения, как описано тут: http://php.net/manual/ru/class.errorexception.php

В PHP7 часть фатальных ошибок была заменена на выброс исключения.

Соответственно, поймать такую ошибку сложно, если учесть, что она фатальная и завершает скрипт. Надо ставить обработчик ошибок, а в нем анализировать сообщение об ошибке (либо ловить исключение и анализировать его текст). Проще использовать предложенный тобой вариант (убрать тайп-хинт). Хотя я не представляю, когда нужно их перехватывать.

> 3. Решаю сейчас ООП-будильник, потом нужно будет решать Вектор или эти задачки взаимозаменяемые?

Решай в любом порядке, но лучше решить обе. Вектор посложнее.
Ответы: >>1270422
Аноним 2018/09/26 04:55:27  №1270422 17
>>1270391
>как это аккуратно сделать
Яваскриптом.
>>1270393
>Не забудь предусмотреть область для показа ошибок
Ошибки во всплывающем окошке выводятся.