File tree Expand file tree Collapse file tree 2 files changed +37
-0
lines changed Expand file tree Collapse file tree 2 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -458,6 +458,34 @@ defmodule String do
458458 @spec next_codepoint ( t ) :: { codepoint , t } | :no_codepoint
459459 defdelegate next_codepoint ( string ) , to: String.Unicode
460460
461+ @doc % B """
462+ Checks whether `str` is a valid UTF-8 string.
463+
464+ ## Examples
465+
466+ iex> String.valid?("a")
467+ true
468+ iex> String.valid?("ø")
469+ true
470+ iex> String.valid?(<<0xffff :: 16>>)
471+ false
472+ iex> String.valid?("asd" <> <<0xffff :: 16>>)
473+ false
474+
475+ """
476+ @ spec valid? ( t ) :: boolean
477+ def valid? ( << _ :: utf8 , t :: binary >> ) do
478+ valid? ( t )
479+ end
480+
481+ def valid? ( << >> ) do
482+ true
483+ end
484+
485+ def valid? ( _ ) do
486+ false
487+ end
488+
461489 @doc % B """
462490 Checks whether `str` is a valid codepoint.
463491
Original file line number Diff line number Diff line change @@ -228,6 +228,15 @@ defmodule StringTest do
228228 assert String . slice ( "" , 0 , 1 ) == nil
229229 end
230230
231+ test :valid? do
232+ assert String . valid? ( "afds" )
233+ assert String . valid? ( "øsdfh" )
234+ assert String . valid? ( "dskfjあska" )
235+
236+ refute String . valid? ( << 0xffff :: 16 >> )
237+ refute String . valid? ( "asd" <> << 0xffff :: 16 >> )
238+ end
239+
231240 test :valid_codepoint? do
232241 assert String . valid_codepoint? ( "a" )
233242 assert String . valid_codepoint? ( "ø" )
You can’t perform that action at this time.
0 commit comments