测试字符串是否是数字

发布于 2024-10-09 13:58:46 字数 23 浏览 1 评论 0原文

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

How to test if a string is composed only of digits ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

献世佛 2024-10-16 13:58:47

例如,使用 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] == [].

请注意,解决方案将认为空列表有效输入。

For example, using the re module:

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

Or, using list comprehension:

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

Note that both solutions will consider the empty list valid input.

哭泣的笑容 2024-10-16 13:58:47
not lists:any(fun(C)->C < $0 or C > $9 end, YourString).

不过,在生产中,我同意 list_to_integer,因为它可能得到了更好的优化。我不确定“any”和“all”是否有不同的遍历特性 - 您可以根据另一个来实现它们,但它们可能都是用 C 实现的。

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

In production, though, I would agree with the list_to_integer as it's probably better optimized. I'm not sure whether there are different traversal characteristics on 'any' vs 'all' either - you could implement each of them in terms of the other, but they're probably both implemented in C.

长发绾君心 2024-10-16 13:58:47

Erlang 没有提供一种方法来判断字符串是否代表数字
值与否,但确实带有内置函数 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

Erlang doesn't come with a way to say if a string represents a numeric
value or not, but does come with the built-in function is_number/1,
which will return true if the argument passed is either an integer or
a float. Erlang also has two functions to transform a string to either
a floating number or an integer, which will be used in conjunction
with 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

逆蝶 2024-10-16 13:58:46

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

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).

One way is to convert it to an integer and if that fails then you'll know it's not an integer.

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

Or you can just check all of the digits, but you do have to check the edge case of an empty list:

is_integer("") ->
    false;
is_integer(S) ->
    lists:all(fun (D) -> D >= $0 andalso D =< $9 end, S).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文