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"
