如何从`[[:: punct:]]`中获取Ruby Regexp标点列表?

时间:2019-03-12 14:23:40

标签: regex ruby

我正在使用devise-security gem,并进行了设置,以便要求密码(通过symbol输入config.password_complexity

现在我想显示可能使用的符号。

看看gem的代码,我发现they're actually using the Regexp [[:punct:]]

能否请您告诉我如何从Ruby代码中从[[:punct:]] POSIX括号表达式中获取符号列表?

我期望得到一个像#$%^*)这样的字符串。

1 个答案:

答案 0 :(得分:7)

[[:punct:]]指的是Unicode中的标点符号。例如:https://www.fileformat.info/info/unicode/category/Po/list.htm

s = "foo\u1368bar" # => "foo፨bar"
s.split(/[[:punct:]]/) # => ["foo", "bar"]
  

对不起,但是我的问题是要使用Ruby获取该列表。

由于缺少更好的主意,您现在始终可以从1循环到unicode中的最大字符数,将其视为字符代码,生成一个单字符字符串,并将其与[[:punct:]] regex进行匹配。这是快速而肮脏的实现

punct = 1.upto(65535).map do |x|
  x.chr(Encoding::UTF_8)
rescue RangeError
  nil
end.reject(&:nil?).select do |s|
  s =~ /[[:punct:]]/
end

结果(如我的macOS所示):

unicode punctuation