【问题标题】:Elixir - How to check if a String contains text or if it's a number ("453")Elixir - 如何检查字符串是否包含文本或是否为数字(“453”)
【发布时间】:2020-01-27 06:41:59
【问题描述】:

我有一个字符串列表

>> list = ["h3llo","899","3@"]

如果列表元素至少有 1 个字母或特殊字符,则将其视为 :text,否则为 :number

>> list = [:text, :number, :text]

我该怎么做?

【问题讨论】:

    标签: string numbers elixir


    【解决方案1】:

    您可以使用String.contains? 效果很好,请参考文档中提取的一个示例:

    String.contains?("elixir of life", "of")

    【讨论】:

      【解决方案2】:

      另一种方法是简单的正则表达式

      iex> Regex.match?(~r/^\d+$/, "h3llo")
      false
      iex> Regex.match?(~r/^\d+$/, "899")
      true
      iex> Regex.match?(~r/^\d+$/, "3@")
      false
      

      【讨论】:

      • if str =~ ~r/[^\d]/, do: :text, else: :number。我不建议使用正则表达式的原因是因为我认为尽可能使用内置的解析功能会更好,而且正则表达式很难阅读并且很快就会变得丑陋。我也做了一些基准测试,正则表达式似乎比整数解析慢 4-5 倍。
      【解决方案3】:

      一种方法是使用Integer.parse/2:

      case Integer.parse(str) do
        {_, ""} -> :number
        _ -> :text
      end
      

      【讨论】:

        猜你喜欢
        • 2013-05-03
        • 1970-01-01
        • 2020-04-15
        • 2019-06-06
        • 1970-01-01
        • 2016-05-06
        • 2021-03-04
        • 2013-11-20
        相关资源
        最近更新 更多