我的意思是,如果字符串为空或只包含空格,则为空。例如:""
、" "
和"\n"
都是空白。
在Rails中,我们有.blank?
方法。
在Elixir(或Phoenix框架)中是否有类似的东西?
我的意思是,如果字符串为空或只包含空格,则为空。例如:""
、" "
和"\n"
都是空白。
在Rails中,我们有.blank?
方法。
在Elixir(或Phoenix框架)中是否有类似的东西?
String.trim/1 看起来是自 Elixir 1.3.0 起可行的解决方案。
strip
仍然可以使用,但它已在 1.3.0 版本发布时被软弃用,并且未在 String 文档中列出。
有String.strip/1函数可以将您的三个示例转换为""
,您可以将其与其他内容进行比较。
iex(4)> String.strip("\n") == ""
true
iex(5)> String.strip("") == ""
true
iex(6)> String.strip(" ") == ""
true
when binary_part(string, 1, -1)
- Chris Keeleblank?
方法尽可能相同的行为。def deps do
[{:blankable, "~> 0.0.1"}]
end
iex> a = ""
""
iex> b = "b"
"b"
iex> ^b = "b"
"b"
iex> ^a = "your String"
** (MatchError) no match of right hand side value: ""
iex> ^a = ""
""
或者更好的是检查它的字节数
iex> if byte_size("") == 0 do true else false end
true
iex> if byte_size("a") == 0 do true else false end
false
defmodule Hello do
def is_blank(nil), do: true
def is_blank(val) when val == %{}, do: true
def is_blank(val) when val == [], do: true
def is_blank(val) when is_binary(val), do: String.trim(val) == ""
def is_blank(val), do: false
end
import Hello
is_blank nil
is_blank []
is_blank %{}
is_blank ""
is_blank ["A"]
is_blank %{a: "A"}
is_blank "A"
这对我来说在大多数情况下都有效,并且非常类似于 Ruby 中的 is_blank?
。
def is_blank?(data), do: (is_nil(data) || Regex.match?(~r/\A\s*\z/, data))