簡體   English   中英

如何從`[[:: punct:]]`獲取Ruby Regexp標點列表?

[英]How to get the Ruby Regexp punctuation list from the `[[:punct:]]`?

我正在使用devise-security gem,並進行了設置,以便要求密碼中有一個symbol (通過config.password_complexity )。

現在,我想顯示可能使用的符號。

看看gem的代碼,我發現它們實際上是在使用Regexp [[:punct:]]

您能告訴我如何從Ruby代碼中從[[:punct:]] POSIX括號表達式中獲取符號列表嗎?

我期望得到像#$%^*)這樣的字符串。

[[: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:]]正則表達式匹配。 這是快速而骯臟的實現

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標點

如果您只想要標點符號的示例(因為完整列表相當笨拙),我將選擇一個您喜歡的示例,然后確保它確實與模式匹配:

example_punctuation = '(*!@$#jfas,./'.gsub(/[^[:punct:]]/, '')
# "(*!@$#,./"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM