Насколько я знаю, Ruby не поддерживает свойства Unicode (по крайней мере до версии 1.8), поэтому вам, возможно, придется использовать
^(?:[^\W\d_]|-)+$
Объяснение: [^\W\d_]
соответствует любой букве (буквально это означает "Совпадает с символом, который не является ни буквенно-цифровым символом, ни цифрой, ни подчеркиванием"). В этом случае двойной минус - это правильная вещь. Поскольку мы используем отрицательный класс символов, нам нужно разрешить -
поочередно.
Предупреждение: Начиная с регулярные-выражения.info похоже, что Ruby сопоставляет только символы ASCII с сокращением \w
, поэтому это регулярное выражение может работать не так, как задумано. У меня не установлен Ruby, но на rubular.com это регулярное выражение работает правильно.
Альтернативное решение
^[[:alpha:]-]+$
должно соответствовать не-ASCII-символам согласно регулярным-выражениям.info и RegexBuddy, но на rubular.com это не работает.