测试字符串是否为数字

时间:2010-12-27 00:38:53

标签: erlang

如何测试字符串是否仅由数字组成?

4 个答案:

答案 0 :(得分:5)

一种方法是将其转换为整数,如果失败,那么你就会知道它不是一个整数。

is_integer(S) ->
    try
        _ = list_to_integer(S),
        true
    catch error:badarg ->
        false
    end.

或者您可以只检查所有数字,但您必须检查空列表的边缘情况:

is_integer("") ->
    false;
is_integer(S) ->
    lists:all(fun (D) -> D >= $0 andalso D =< $9 end, S).

答案 1 :(得分:4)

例如,使用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 :(得分:2)

答案 3 :(得分:2)

not lists:any(fun(C)->C < $0 or C > $9 end, YourString).

在制作中,我同意list_to_integer,因为它可能更好地进行了优化。我不确定'any'与'all'是否存在不同的遍历特征 - 你可以用另一个来实现它们中的每一个,但它们可能都是用C实现的。