Есть ли лучший способ проверки данных в Perl, чем регулярное выражение? - PullRequest
2 голосов
/ 30 июля 2009

Есть ли лучший способ проверки данных в Perl, чем регулярное выражение?

У меня есть Perl-код, который выполняет проверку строковых и числовых данных с использованием сложного регулярного выражения, и это делает код трудным для чтения и отслеживания для всех.

Ответы [ 7 ]

8 голосов
/ 30 июля 2009

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

Не делай этого. Используйте одно регулярное выражение для каждого требования.

7 голосов
/ 30 июля 2009

Существует абсолютно потрясающий модуль для проверки параметров в perl: Params :: Validate

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

6 голосов
/ 30 июля 2009

Не изобретай велосипед. Используйте Regexp :: Common из CPAN :

#!/usr/bin/perl

use strict;
use warnings;

use Regexp::Common qw(number);

my $val = '500.345';

print "Good float\n" if $val =~ /^$RE{num}{real}$/;

CPAN ваш друг.

1 голос
/ 31 июля 2009

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

В общем, ответ на этот вопрос "возможно".

1 голос
/ 30 июля 2009

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

Существует (часто не используется) // флаг x для регулярных выражений, который позволяет создавать очень читаемых регулярных выражений с комментариями.

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

0 голосов
/ 30 июля 2009

Там может быть.

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

0 голосов
/ 30 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...