Ruby:如何检查UTF-8字符串是否只包含字母和数字?

时间:2011-01-31 22:20:08

标签: ruby unicode utf-8 character-properties

我有一个UTF-8字符串,可能是任何语言。

如果它不包含任何非字母数字字符,我如何检查?

我在UnicodeUtils Ruby gem中找不到这样的方法。

示例:

  1. ėččę91 - 有效
  2. $ 120D - 无效

3 个答案:

答案 0 :(得分:3)

您可以将POSIX表示法用于alpha-numerics:

#!/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
$

答案 1 :(得分:1)

在ruby regex \ p {L}中表示任何字母(在任何字形中)

所以如果s代表你的字符串:

 s.match /^[\p{L}\p{N}]+$/

这将过滤掉非数字和字母。

答案 2 :(得分:1)

一个字母数字代码点的模式是

/[\p{Alphabetic}\p{Number}]/

从那里可以很容易地推断出这样的东西,因为它具有负面效果:

/[^\p{Alphabetic}\p{Number}]/

或者这是积极的:

 /^[\p{Alphabetic}\p{Number}]+$/

或有时这个,取决于:

/\A[\p{Alphabetic}\p{Number}]+\z/

选择最适合您需求的那个。