Всем привет! Задание по регулярке: Должно быть от 3 до 30 символов, разрешены только буквы и ОДИН знак "*" в любом месте. Мои решения:
/^(?=.{3,30}$)([a-zA-Z]+\*?)$/
/^(?=.{3,30}$)(\*?[a-zA-Z]+\*?[a-zA-Z]+\*?)$/
Ну как Вы понимаете это не правильно. Помогите решить.
/^(?=.{3,30}$)[a-zA-Z]*\*?[a-zA-Z]*$/
Тест на regex101.com
Наиболее оптимальный способ — проверить длину строки с помощью блока просмотра вперёд (как в оригинальном выражении), а потом найти 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));
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости