Ruby:如何检查UTF-8字符串是否只包含字母和数字?
我有一个UTF-8字符串,可以是任何语言 如果不包含任何非字母数字字符,如何检查 我在UnicodeUtils Ruby gem中找不到这种方法 示例:Ruby:如何检查UTF-8字符串是否只包含字母和数字?,ruby,unicode,utf-8,character-properties,Ruby,Unicode,Utf 8,Character Properties,我有一个UTF-8字符串,可以是任何语言 如果不包含任何非字母数字字符,如何检查 我在UnicodeUtils Ruby gem中找不到这种方法 示例: ėę91-有效 $120D-无效 您可以使用POSIX符号表示字母数字: #!/usr/bin/env ruby -w # encoding: UTF-8 puts RUBY_VERSION valid = "ėččę91" invalid = "$120D" puts valid[/[[:alnum:]]+/] puts invalid
您可以使用POSIX符号表示字母数字:
#!/usr/bin/env ruby -w
# encoding: UTF-8
puts RUBY_VERSION
valid = "ėččę91"
invalid = "$120D"
puts valid[/[[:alnum:]]+/]
puts invalid[/[^[:alnum:]]+/]
哪些产出:
1.9.2
ėččę91
$
您可以使用POSIX符号表示字母数字:
#!/usr/bin/env ruby -w
# encoding: UTF-8
puts RUBY_VERSION
valid = "ėččę91"
invalid = "$120D"
puts valid[/[[:alnum:]]+/]
puts invalid[/[^[:alnum:]]+/]
哪些产出:
1.9.2
ėččę91
$
在ruby正则表达式中\p{L}表示任何字母(在任何字形中) 因此,如果s代表字符串:
s.match /^[\p{L}\p{N}]+$/
这将过滤掉非数字和字母。在ruby正则表达式中\p{L}表示任何字母(在任何字形中) 因此,如果s代表字符串:
s.match /^[\p{L}\p{N}]+$/
这将过滤掉非数字和字母。一个字母数字代码点的模式为
/[\p{Alphabetic}\p{Number}]/
从这里很容易推断出这样的情况,因为它有一个负值:
/[^\p{Alphabetic}\p{Number}]/
或者,这一切都是积极的:
/^[\p{Alphabetic}\p{Number}]+$/
有时,这取决于:
/\A[\p{Alphabetic}\p{Number}]+\z/
选择一个最适合您的需要。一个字母数字代码点的模式是
/[\p{Alphabetic}\p{Number}]/
从这里很容易推断出这样的情况,因为它有一个负值:
/[^\p{Alphabetic}\p{Number}]/
或者,这一切都是积极的:
/^[\p{Alphabetic}\p{Number}]+$/
有时,这取决于:
/\A[\p{Alphabetic}\p{Number}]+\z/
选择最适合您需要的版本。哪个版本的Ruby?1.8具有有限的多字节能力。我使用的是最新的版本-1.92哪个版本的Ruby?1.8具有有限的多字节能力。1.9+有黑桃。我正在使用最新的一个-1.92你有
\d
,但\d
不是数字\pN
是数字,或rubyspeak,即\p{N}
的详细程度\d
只是\p{Decimal\u Number}
a.k.a.\p{Numeric\u Type=Decimal}
不是Ruby费心支持所有类似的Unicode属性,但无论如何1.9比1.8好。不过,还有很长的路要走。为此,我更新了答案,使数字更加精确。从技术上讲,只有1000多个代码点是\p{alphastic}
类型,但不是\p{Letter}
。如果您还没有规范化为NFC形式,或者已经反配置为NFD或NFKD,这一点尤其重要,但事实上,甚至在NFC形式中也可能发生。看情况而定。你有\d
,但\d
不是数字\pN
是数字,或rubyspeak,即\p{N}
的详细程度\d
只是\p{Decimal\u Number}
a.k.a.\p{Numeric\u Type=Decimal}
不是Ruby费心支持所有类似的Unicode属性,但无论如何1.9比1.8好。不过,还有很长的路要走。为此,我更新了答案,使数字更加精确。从技术上讲,只有1000多个代码点是\p{alphastic}
类型,但不是\p{Letter}
。如果您还没有规范化为NFC形式,或者已经反配置为NFD或NFKD,这一点尤其重要,但事实上,甚至在NFC形式中也可能发生。这要看情况了。这和[\p{Alphabic}\p{Number}]
一样吗?这和[\p{Alphabic}\p{Number}]
一样吗?