Помогите с регуляркой!

257
25 ноября 2017, 11:44

Всем привет! Задание по регулярке: Должно быть от 3 до 30 символов, разрешены только буквы и ОДИН знак "*" в любом месте. Мои решения:

/^(?=.{3,30}$)([a-zA-Z]+\*?)$/
/^(?=.{3,30}$)(\*?[a-zA-Z]+\*?[a-zA-Z]+\*?)$/

Ну как Вы понимаете это не правильно. Помогите решить.

Answer 1
/^(?=.{3,30}$)[a-zA-Z]*\*?[a-zA-Z]*$/

Тест на regex101.com

Answer 2

Наиболее оптимальный способ — проверить длину строки с помощью блока просмотра вперёд (как в оригинальном выражении), а потом найти 0+ букв после которых следует опциональная последовательность обязательного знака * и снова 0+ букв:

/^(?=.{3,30}$)[a-zA-Z]*(?:\*[a-zA-Z]*)?$/

См. демо регулярного выражения.

  • ^ - начало строки
  • (?=.{3,30}$) - с начала строки и до конца должно быть от 3 до 30 любых символов, отличных от символов перевода на новую строку
  • [a-zA-Z]* - 0 или более ASCII-букв
  • (?:\*[a-zA-Z]*)? - 1 или 0 повторов
    • \* - символ *
    • [a-zA-Z]* - 0 или более ASCII-букв
  • $ - конец строки.

var strs = ['abcXYZ','abc*XYZ','*abcXYZ', 'abcXYZ*','*abcXYZ*','abc**XYZ', 'a*bcXY*Z', '', 'a', 'ab']; 
var rx = /^(?=.{3,30}$)[a-zA-Z]*(?:\*[a-zA-Z]*)?$/; 
for (var s of strs) { 
  console.log(s, "=>", rx.test(s)); 
}

READ ALSO
HTML5 API history

HTML5 API history

Проблема заключается в следующемЕсть приложение и меню

281
Warning: fsockopen(): unable to connect to (php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution)

Warning: fsockopen(): unable to connect to (php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution)

Установил битриксШтатными средствами проверяю его его на ошибки, выдает ошибку в работе с сокетами

305
Как в боте телеграм обратится к предыдущему сообщению?

Как в боте телеграм обратится к предыдущему сообщению?

Добрый день, хочу сделать меню с выбором нескольких настроекПишем Старт, Бот предлагает несколько вариантов ответа

186