Добро пожаловать в мир программирования!
Не думаю, что ваш вопрос является признаком ошибки с вашей стороны. Скорее, это основная проблема , которая появляется во многих ипостасях мира программирования. Строки, которые имеют некоторую структуру и имеют значение , означающее , передаются между различными подсистемами приложения, и каждая подсистема может выполнять только большой анализ и проверку.
Проблема проверки адреса электронной почты, например, довольно сложная. Например, регулярные выражения, предлагаемые разными людьми для принятия адреса электронной почты, обычно бывают либо «слишком жесткими» (не все принимаются), либо «слишком свободными» (принимают незаконные вещи). Первый гугл-хит для 'regex' адрес электронной почты '', например, говорит:
Регулярное выражение, которое я получаю
большинство отзывов, не говоря уже о «баге»
отчеты, это тот, который вы найдете
прямо на домашней странице этого сайта:
\ b [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [A-Z] {2,4} \ b Проанализируйте это регулярное выражение с помощью
RegexBuddy. Это регулярное выражение, я
претензия, соответствует любому адресу электронной почты. Наиболее
обратной связи я получаю опровергает, что
заявить, указав один адрес электронной почты
что это регулярное выражение не соответствует.
Дело в том, что действительный адрес электронной почты является или не является сложной проблемой, которую данная программа может или не может решить. Проблема URL-адресов еще хуже, особенно с учетом возможности вредоносных URL-адресов.
В идеале вы можете иметь библиотеку или системный вызов, который решает проблемы такого рода, вместо того, чтобы делать что-либо самостоятельно (Microsoft Windows вызывает настраиваемое диалоговое окно, чтобы позволить пользователю выбрать или создать файл, поскольку проверка имен файлов - это еще хитрая проблема). Но вы не всегда можете рассчитывать на наличие соответствующего системного вызова для данной «значимой строки».
Я бы сказал, что нет общего решения проблемы строк со структурой. Скорее, это основная проблема, которая появляется прямо при разработке приложения. В процессе сбора требований для вашего приложения вы должны определить, какие данные будет принимать приложение и насколько значимыми будут эти данные для приложения . И вот тут все становится сложнее, поскольку вы можете заметить, что приложение может расти такими способами, о которых ваш босс или клиент не мог подумать - или приложение может фактически расти такими способами, о которых никто из вас не думал. Таким образом, приложение должно быть немного более гибким, чем то, что кажется минимальным, НО только немного. Это также не должно быть настолько гибким, что вы увязли.
Теперь, если вы решите, что вам нужно проверить / интерпретировать и т. Д. Данную строку, размещение этой строки в объекте или хэше может быть хорошим подходом - это один из известных мне способов убедиться, что ваш интерфейс понятен. Но самое сложное - решить, сколько вам нужно валидации или интерпретации.
Принятие этих решений, таким образом, является искусством - здесь нет никаких догматических ответов.