За последние 24 часа нас посетили 21909 программистов и 1010 роботов. Сейчас ищут 674 программиста ...

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

Тема в разделе "Регулярные выражения", создана пользователем miltorg, 8 сен 2019.

  1. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Я тут узнал что некоторые при получении данных с формы - подключают целые фреймворки для безопасности.

    Я же использую простейшие Регулярные выражения, типа:

    if (preg_match('/\D/', $id)) $id=103;

    И считаю это правельным.
    По крайней мере все кого я просил это сломать - не сломали.

    Хотелось бы услышать ваше мнение. Спасибо.
    --- Добавлено ---
    Давайте не будем охватывать всё необъятное, а сосредоточимся именно на $id - это целое число.
    Выясним всё про неё и пойдём дальше.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    начнем с того, что проверка того целое число или нет, это уровень детского сада. поэтому тут и обсуждать нечего.
    фреймворки подключают не только для этого. а для того что там все базовые функции веб приложения УЖЕ реализованы. поэтому ненадо изобретать велосипед. берешь и используешь.

    итак. с целым числом элементарно.
    далее.
    а если вам нужно проверить чтото посложнее. например Емайл, УРЛ...
    тоже регулярка?
     
  3. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    То есть при условии что $id должно быть целым числом, а оно и должно быть целым числом - я всё написал идеально?
    Я правильно понял ваш пост?
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    да, ты всё написал идеально и вообще ты сам идеальный.
    а так как ты идеальный и развиваться тебе некуда, то и развитие твоё остановлено.
    и, похоже, остановлено до того, как ты попал в WEB ибо споришь с базовыми принципами.
     
  5. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Очень, очень печально что вам не понятно /\D/ - это просто катастрофа. Вы что закончили? В каком году?
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @miltorg, у тебя ХЗ что за логика в представленном в первом посте коде. Получше придумать не мог, чтобы ответы были поадекватнее. Что за «$id=103;»??? Вообще же приведение к int (после проверки существования соотв. параметра, если речь о входном параметре) – надежный вариант для школоты. А серьезные дядечки (и тетечки) могу написать в регулярке и так: [1-9]\\d{0,9} (если речь идет именно о числе, а не о цифрах).
    --- Добавлено ---
    P.S. Это натуральное максимум десятизначное. Для целого додумайте сами.
     
  7. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Стоп. Мы не выдумываем своё. Мы разносим в пух и прах моё. Показываем мне на мои ужасные промахи.
    --- Добавлено ---
    и громим меня - по поводу того, что это в корне не верный подход
    --- Добавлено ---
    А что написали вы?
    - Ваша регулярка прекрасна но давайте ограничим её 10 цифрами?
    --- Добавлено ---
    И даже не знаете что там у меня в регулярке написано не число? - Беда
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    как проверять входные данные, дело личное.
    но суть в том, что языки зачастую предоставляют разработчику ГОТОВЫЕ инструменты для этого. язык, а не фреймворки.
    в пхп они тоже есть - Фильтры валидации данных
    а регулярки юзают для других вещей.
     
  9. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    И даже не знаете что там у меня в регулярке написано не число?
    А я разве против?
    Вы все только что писали что писать так как я пишу - нельзя.
    А теперь уже пишите:
    как проверять входные данные, дело личное.

    Не последовательненько как то.
     
  10. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    я понимаю, что вы очень гордитесь своей сложной регуляркой, но поверьте, большая часть народа тут разбирается в этом лучше вас :)
     
  11. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Натуральное, максимум десятизначное будет так:

    \d{1,10}

    А что написали вы? Вот что:
    2\dddddddd - подобное проходит под вашу регулярку
    --- Добавлено ---
    Вот выше как раз я пример и привёл как тут народ разбирается...
     
  12. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    да дело личное, ибо заставить вас никто не сможет.
    но при этом, опытные разработчики знают как делать это правильно, и делятся с вами этой информацией.
    ваши доводы, уровня сломайте если сможете, совершенно ничего не доказывают. я тоже могу написать простейший код, как у вас, только использовать intval() или is_int()
    и сказать. Попробуйте сломайте.
    и вы тоже не сможете сломать. и что это будет доказывать? что регулярки фигня?
    реально уровень детсада
     
  13. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Вы пошли не в ту сторону. Давайте переходить к более сложным структурам.
    Для этого вы должны признать что мой /\D/ - полностью правильный и безопасный
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ты же не сказал что именно делает твой код. Как можно составить о нём мнение без этого?

    \D означает "в строке есть хотя бы одна не цифра". И таки что? Если цель проверить буквально это, то ты блестяще справился :)

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

    Впрочем, зачем я рассказываю тому, кого устраивает $1 в час (до 12K руб в месяц) Похоже ты свои последние годы решил потратить на бесполезную фигню.
     
  15. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Спасибо. Именно это и проверяется в id.
    В нём должны быть только цифры
    Вы не знали?
    --- Добавлено ---
    Как только мы закончим с id - так я сразу перейду к более сложным для вас понятиям
    --- Добавлено ---
    И в конце занятия, для проверки формы вам не понадобится подключать огромные фреймворки
    --- Добавлено ---
    Вы просто не шарите в Регулярках - поэтому это для вас так сложно.
     
  16. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    )))
    ок. регулярка прекрасна.и полностью безопасна. красавчик!
    давайте дальше.
    что будете делать с валидацией Емайла?
     
  17. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    ура!
    ура! Я знал. Что вот так долго-то.
    Ок. Не перескакивайте. Следующим пунктом там были $imja и $familija

    https://php.ru/forum/threads/baza-dannyx-mysql-kak-pravilno-podkljuchitsja-i-sdelat-zapros.78121
    --- Добавлено ---
    if(preg_match('/\W/u',$imja))$imja='Vasja';

    --- это проверка имени перед вставкой в Базу
    --- Добавлено ---
    Вы должны написать что и тут всё прекрасно и замечательно
     
  18. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    всё прекрасно. за исключением например того что есть имена типа Анна-Мария. а еще есть страны, где допустимы имена которые ваша регулярка не пропустит.
    к чему вообще эти ограничения. пусть вводят что хотят.
     
  19. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Как будет, я написал. Мозгов что ли не хватило, чтобы понять, зачем нужен более сложный вариант, приведенный мной?

    ЧЁ? Там дв. бэкслэш для строки пыха предназначен. В общем-то он скорее всего необязателен, но спецы обычно пишут. Вы не поняли, потому что не спец и опять мозг не захотели вкл.
     
  20. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Вы проходили Теорию Вероятности?
    Нас учили что резко отличающиеся результаты вообще не нужно рассматривать.
    + мы смотрим мой код с точки зрения БЕЗОПАСНОСТИ

    Скажите ещё раз что он прекрасен и мы пойдём дальше
    --- Добавлено ---
    То есть вы не тестировали свою регулярку?
    Протестируйте.
    --- Добавлено ---
    Понятно. У всех нет мозгов:

    /[1-9]\\d{0,9}/

    Match a single character present in the list below
    [1-9]
    1-9 a single character in the range between 1 (index 49) and 9 (index 57) (case sensitive)
    \\ matches the character \ literally (case sensitive)

    d{0,9}
    matches the character d literally (case sensitive)
    {0,9} Quantifier — Matches between 0 and 9 times, as many times as possible, giving back as needed (greedy)
     
  21. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    бред. система должна работать для всех клиентов, а не только для тех чьи имена нравятся лично одному безумному разработчику.

    и где это вас так учили? в ВУЗе? специальность на которую вы учились связана с программированием, ИТ, электроникой?
     
  22. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Блин. Вы ведь даже не читали Теорию вероятностей.
    Чему нас учили?:
    Какова вероятность попадания в блиндаж, если в окоп мы уже попали. Блиндаж - оно в окопе.
    Ни чего личного - просто экономия боеприпасов.
    --- Добавлено ---
    Сфера применения - Да везде. Позволяет не ломать голову над резко отличающимися результатами.
    Я за 20 лет написал много кода
    1. Ни один не взломали
    2. Не было ни одного Д'артаньяна.
     
  23. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Не, только у некоторых, раз они не понимают написанное (я не так много написал, чтобы упустить это из виду в норме):
     
  24. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Это если снаряд не вылетел из ствола орудия. А вы предлагаете рассматривать и этот случай. Не нужно это. Не целесообразно.
    --- Добавлено ---
    Регулярные выражения пишутся в виде регулярных выражений или приводите целую строку. На любом языке.
     
  25. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Салтыков-Щедрин, Шеллер-Михайлов, Мамин-Сибиряк, Новиков-Прибой. Бонгард-Левин, Гулак-Артемовский...
    не часто, но это есть и у нас. а в других странах это ещё более распространено.
    так что теорию вероятностей сюда приплетать ненужно. вы просто неправильно поняли это и теперь неправильно используете. создавая ограничения для людей там где их вообще не должно быть.

    так на какую специальность учились?