File tree 2 files changed +37
-0
lines changed
2 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -458,6 +458,34 @@ defmodule String do
458
458
@spec next_codepoint ( t ) :: { codepoint , t } | :no_codepoint
459
459
defdelegate next_codepoint ( string ) , to: String.Unicode
460
460
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
+
461
489
@doc % B """
462
490
Checks whether `str` is a valid codepoint.
463
491
Original file line number Diff line number Diff line change @@ -228,6 +228,15 @@ defmodule StringTest do
228
228
assert String . slice ( "" , 0 , 1 ) == nil
229
229
end
230
230
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
+
231
240
test :valid_codepoint? do
232
241
assert String . valid_codepoint? ( "a" )
233
242
assert String . valid_codepoint? ( "ø" )
You can’t perform that action at this time.
0 commit comments