web-dev-qa-db-fra.com

Comment vérifier si une chaîne est vide dans Elixir

Je veux dire qu'une chaîne est vide si elle est vide ou contient des espaces blancs uniquement. Par exemple, "", " " et "\n" sont tous vides.

Dans Rails, nous avons le .blank? méthode.

Y a-t-il quelque chose de similaire dans Elixir (ou dans le Framework Phoenix)?

25
Van Huy

String.trim/1 semble faire l'affaire à partir d'Elixir 1.3.0.

strip fonctionne toujours, mais il était obsolète dans la version 1.3. et il n'est pas répertorié dans les documents à http://elixir-lang.org /docs/stable/elixir/String.html#functions .

26
Jason Harrison

Il y a String.strip/1 qui convertira vos 3 exemples en "" que vous pouvez comparer.

iex(4)> String.strip("\n") == ""
true
iex(5)> String.strip("") == ""  
true
iex(6)> String.strip("    ") == ""
true

Il y avait un problème à ce sujet https://github.com/elixir-lang/elixir/pull/2707

15
Gazler

J'ai publié une petite bibliothèque pour le faire correctement pour tout type de données. Il implémente un comportement identique à Rails 'blank? méthode dans Elixir autant que possible.

La bibliothèque est ici: https://github.com/samphilipd/blankable

Pour installer, ajoutez blankable à votre liste de dépendances dans mix.exs:

def deps do
  [{:blankable, "~> 0.0.1"}]
end
6
Sam Davies

pourquoi ne pas simplement utiliser la correspondance de motifs

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

ou mieux encore, vérifiez sa taille en octets

iex> if byte_size("") == 0 do true else false end
true
iex> if byte_size("a") == 0 do true else false end
false
2
mjwrazor