Как я могу написать регулярное выражение на Ruby, которое определит, соответствует ли строка этим критериям?

#ruby #regex

#ruby #регулярное выражение

Вопрос:

Как я могу написать регулярное выражение в Ruby 1.9.2, которое определит, соответствует ли строка этим критериям:

  • Может включать только буквы, цифры и - символ
  • Не может быть пустой строкой, т. Е. не может иметь длину 0
  • Должно содержать хотя бы одну букву

Комментарии:

1. Второй критерий избыточен (уже охвачен третьим).

Ответ №1:

 /A[a-z0-9-]*[a-z][a-z0-9-]*z/i
  

Это выглядит так

  • начало строки
  • несколько (или ноль) букв, цифр и / или тире
  • буква
  • несколько (или ноль) букв, цифр и / или тире
  • конец строки

Ответ №2:

Я полагаю, эти два помогут вам: /A[a-z0-9-]{1,}z/i и /[a-z]{1,}/i . Первое проверяет первые два правила, а второе проверяет последнее условие.

Ответ №3:

Нет регулярного выражения:

 str.count("a-zA-Z") > 0 amp;amp; str.count("^a-zA-Z0-9-") == 0
  

Ответ №4:

Вы можете ознакомиться с этим руководством по использованию регулярных выражений в ruby. Что касается того, что вам нужно, вы можете использовать следующее:

 ^[A-Za-z0-9-] $
  

^ Даст команду механизму регулярных выражений начать сопоставление с самого начала строки.

[..] Даст команду движку регулярных выражений сопоставить любой из содержащихся в них символов.

A-Z означает любую букву верхнего регистра, a-z означает любую букву нижнего регистра, а 0-9 означает любое число.

- Проинструктирует механизм регулярных выражений соответствовать - . Используется перед ним, потому что - в регулярном выражении является специальным символом, поэтому его нужно экранировать

$ Даст команду механизму регулярных выражений прекратить сопоставление в конце строки.

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

Вы также можете использовать i флаг, чтобы сделать поиск нечувствительным к регистру, поэтому регулярное выражение может стать чем-то вроде этого:

 ^[a-z0-9-] /i$
  

Комментарии:

1. Согласно ruby-doc.org/core-1.9.3/Regexp.html , ^ это начало строки, а не начало строки.