File tree 2 files changed +39
-2
lines changed
2 files changed +39
-2
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
@@ -470,7 +498,7 @@ defmodule String do
470
498
true
471
499
iex> String.valid_codepoint?("ø")
472
500
true
473
- iex> String.valid_codepoint?(" \xff ff" )
501
+ iex> String.valid_codepoint?(<<0xffff :: 16>> )
474
502
false
475
503
iex> String.valid_codepoint?("asdf")
476
504
false
Original file line number Diff line number Diff line change @@ -228,12 +228,21 @@ 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? ( "ø" )
234
243
assert String . valid_codepoint? ( "あ" )
235
244
236
- refute String . valid_codepoint? ( " \xff ff" )
245
+ refute String . valid_codepoint? ( << 0xffff :: 16 >> )
237
246
refute String . valid_codepoint? ( "ab" )
238
247
end
239
248
You can’t perform that action at this time.
0 commit comments