如何检查Elixir中的字符串是否为空

Van*_*Huy 25 elixir phoenix-framework

我的意思是如果字符串为空或仅包含空格,则该字符串为空.例如""," "并且"\n"都是空白.

在Rails中,我们有.blank?方法.

Elixir(或凤凰框架)中有类似的东西吗?

小智 26

String.trim/1似乎从Elixir 1.3.0开始.

strip仍然有效,但它在1.3.0版本中被软推荐使用,并且未在http://elixir-lang.org/docs/stable/elixir/String.html#functions的文档中列出.

  • 不像 Rails 中那样对 nil 起作用,因此需要更详细的解决方案。这将抛出错误: String.trim(nil) (3认同)

Gaz*_*ler 15

String.strip/1可以转换""你可以比较的3个例子.

iex(4)> String.strip("\n") == ""
true
iex(5)> String.strip("") == ""  
true
iex(6)> String.strip("    ") == ""
true
Run Code Online (Sandbox Code Playgroud)

它有一个问题https://github.com/elixir-lang/elixir/pull/2707

  • @nicooga如果你只想检查内部空字符串,请尝试:`when binary_part(string,1,-1)` (3认同)
  • 如果我想在警卫内做这件事怎么办? (2认同)
  • strip 已在 Elixir > 1.3.0 中软弃用。https://github.com/elixir-lang/elixir/releases/tag/v1.3.0 (2认同)

Sam*_*ies 6

我发布了一个小型库来为任何数据类型正确地执行此操作.它实现了与blank?Elixir中Rails 方法相同的行为.

图书馆在这里:https://github.com/samphilipd/blankable

要安装,请将mixable添加到mix.exs中的依赖项列表中:

def deps do
  [{:blankable, "~> 0.0.1"}]
end
Run Code Online (Sandbox Code Playgroud)


mjw*_*zor 5

为什么不直接使用模式匹配

iex> a = ""
""
iex> b = "b"
"b"
iex> ^b = "b"
"b"
iex> ^a = "your String"
** (MatchError) no match of right hand side value: ""
iex> ^a = ""
""
Run Code Online (Sandbox Code Playgroud)

或者更好的是检查它的字节大小

iex> if byte_size("") == 0 do true else false end
true
iex> if byte_size("a") == 0 do true else false end
false
Run Code Online (Sandbox Code Playgroud)