Я не знаком с синтаксисом регулярных выражений Ruby, но я предполагаю, что это похоже, скажем, на Perl. Звучит так, как вы хотите:
/^(?![-_])[-a-z\d_]{1,63}(?<![-_])$/i
Или, если Ruby не использует флаг i
, просто замените [-a-z\d_]
на [-a-zA-Z\d_]
.
Причина, по которой я использую [-a-zA-Z\d_]
вместо более короткого [-\w]
, заключается в том, что, хотя он почти эквивалентен, \w
допускает использование специальных символов, таких как ä , а не только символы типа ASCII. Такое поведение может быть дополнительно отключено в большинстве языков, или вы можете разрешить его, если хотите.
Дополнительная информация о классах символов , квантификаторах и lookarounds