Perl регулярное выражение - экспоненциальные значения - PullRequest
0 голосов
/ 11 мая 2011

Что такое хорошее регулярное выражение для сопоставления десятичного числа, чтобы убедиться, что оно не содержит экспоненциальных значений?

Спасибо за любую помощь.

Могу ли я просто сказать что-то вроде совпадения, кромесодержит "e-", "e +", "E-" или "E +"?

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Это не самое короткое решение, но проверьте правильность целого числа ...

if( $num =~ /^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/ ) {
    #correct floating point
    if( $num =~ /e/i ) {
        #exponential
    } else {
        #not exponential
    }
}
0 голосов
/ 11 мая 2011

Дело в том, что это поле стоимости, и может содержит символы валюты, круглые скобки и другие подобные персонажи

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


Обновление после редактирования OP:

Могу ли я просто сказать что-то вроде матча что-нибудь кроме, если оно содержит «е-», «е +», «Е-» или «Е +»?

Это было бы, например, ^(?!.*[eE][+-]).*$ (используя отрицательный взгляд ), но, вероятно, соответствует больше, чем вам нравится ...

0 голосов
/ 11 мая 2011

Хотя мне не совсем понятно, что вы ищете, вы можете взглянуть на Regexp::Common модуль , который доступен на CPAN, в частности на Regexp::Common::number.Может предложить то, что вы ищете.

...