проверить, является ли строка числом - PullRequest
4 голосов
/ 27 декабря 2010

Как проверить, состоит ли строка только из цифр?

Ответы [ 5 ]

5 голосов
/ 27 декабря 2010

Один из способов - преобразовать его в целое число, и если это не удастся, вы узнаете, что это не целое число.проверьте край край пустого списка:

is_integer("") ->
    false;
is_integer(S) ->
    lists:all(fun (D) -> D >= $0 andalso D =< $9 end, S).
4 голосов
/ 27 декабря 2010

Например, используя модуль re :

1> re:run("1234a56", "^[0-9]*$").
nomatch
2> re:run("123456", "^[0-9]*$"). 
{match,[{0,6}]}

Или, используя понимание списка:

[Char || Char <- String, Char < $0 orelse Char > $9] == [].

Обратите внимание, что оба решения будут считать пустой ввод допустимым.

2 голосов
/ 27 декабря 2010
not lists:any(fun(C)->C < $0 or C > $9 end, YourString).

В производстве, однако, я бы согласился с list_to_integer, поскольку он, вероятно, лучше оптимизирован.Я не уверен, есть ли разные характеристики обхода для «любых» и «всех» - вы можете реализовать каждую из них в терминах другой, но они, вероятно, обе реализованы в C.

2 голосов
/ 27 декабря 2010

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

1 голос
/ 14 сентября 2018

У Эрланга нет способа сказать, представляет ли строка числовое значение или нет, но он поставляется со встроенной функцией is_number / 1, которая будет возвращать true, если переданный аргумент является либоцелое число или число с плавающей запятой.Erlang также имеет две функции для преобразования строки в плавающее число или целое число, которое будет использоваться вместе с is_number / 1.

is_numeric(L) ->
    Float = (catch erlang:list_to_float(L)),
    Int = (catch erlang:list_to_integer(L)),
    is_number(Float) orelse is_number(Int).

https://rosettacode.org/wiki/Determine_if_a_string_is_numeric#Erlang

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