Как получить список пунктуации Ruby Regexp из `[[: punct:]]`? - PullRequest
0 голосов
/ 12 марта 2019

Я использую драгоценный камень devise-security и настраиваю его, чтобы потребовать symbol в пароле (через config.password_complexity).

Теперь я хочу показать возможные символы, которые будутused.

Просматривая код драгоценного камня, я обнаружил, что они на самом деле используют Regexp [[:punct:]].

Подскажите, пожалуйста, как получитьсписок символов из [[:punct:]] выражений POSIX в скобках из кода Ruby?

Я ожидаю получить строку типа #$%^*).

Ответы [ 2 ]

7 голосов
/ 12 марта 2019

[[:punct:]] относится к пунктуации в юникоде. Например: 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

Результат (как показано моими макросами):

unicode punctuation

0 голосов
/ 12 марта 2019

Если вам нужен пример пунктуации (поскольку полный список довольно громоздкий), я бы выбрал понравившийся вам пример и убедился, что он действительно соответствует шаблону:

example_punctuation = '(*!@$#jfas,./'.gsub(/[^[:punct:]]/, '')
# "(*!@$#,./"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...