PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 76


Глава завершается рецептами, относящимися к тригонометрии, логарифмам, умножению матриц, комплексным числам. Заодно вы найдете ответ на часто встре­чающийся вопрос: «Как включить в выводимое число запятую?»

2.1. Проверка строк на соответствие числам

Проблема

Требуется проверить, соответствует ли строка допустимому числу. Эта проблема часто возникает при проверке входных данных (например, в сценариях CGI).

Решение

Сравните строку с регулярным выражением, которое совпадает со всеми интере­сующими вас разновидностями чисел:


2.1. Проверка строк на соответствие числам    69

if ($strmg =- /PATTERN/) { # является числом

> else {

tt не является числом

Комментарий

Все зависит от того, что именно понимать под числом. Даже простые на первый взгляд понятия — например, целое — заставят вас поломать голову над тем, какие строки следует отнести к этой категории. Например, что делать с начальным + для положительных чисел? Разрешить, сделать обязательным или запретить? А числа с плавающей запятой представляются таким огромным количеством спо­собов, что у вас в голове перегреется процессор.

Сначала решите, какие символы допустимы, а какие — нет. Затем сконструи­руйте для отобранных символов регулярное выражение. Ниже приведены неко­торые стандартные конструкции для самых распространенных ситуаций (что-то вроде полуфабрикатов для нашей поваренной книги).

#  Содержит нецифровые символы

warn "has nondigits"                    if     /\0/;

# He является натуральным числом

warn "not a natural number"    unless /"\d+$/;      # Отвергает -3

# He является целым числом

warn "not an integer"        unless /"-?\d+$/;     # Отвергает +3 warn "not an integer"        unless /"[+-]9\d+$/;

# He является десятичным числом

warn "not a decimal number"    unless /"-Ad+X^VM/; * Отвергает .2 warn "not a decimal number"    unless /"-?(?:d+(?:\.\d)?|\.\d+)$/; tt He является вещественным числом С warn "not a C float"




Начало  Назад  Вперед