У меня есть это регулярное выражение ^[a-zA-Z0-9*]+$ для разрешения только буквенно-цифровых символов и разрешения Asterisk (*). Но я хотел бы разрешить звездочку только в начале строки. Но звездочка не допускается в последних 4 цифрах строки.
"Как бы я разрешил Asterisk только в начале строки?" Но если звездочка присутствует в любой из последних 4 позиций, она должна быть недействительной.
Да, это действительно. Звездочка разрешена, за исключением последних 4 цифр. И я обновил этот случай с примером
Вы можете использовать это регулярное выражение, чтобы разрешить только буквенно-цифровые символы и звездочку, но не звездочку в последних 4 позициях символов:
const regex = /^(?:[a-z\d*]*[a-z\d]{4}|[a-z\d]{1,3})$/i;
[
'1',
'12',
'test',
'test1234',
'****1234',
'*tes**1234',
'*1*2345',
'test@#_',
'test****',
'test***5',
'test**4*',
'*3**'
].forEach(str => {
let result = regex.test(str);
console.info(str, '==>', result);
});
Выход:
1 ==> true
12 ==> true
test ==> true
test1234 ==> true
****1234 ==> true
*tes**1234 ==> true
*1*2345 ==> true
test@#_ ==> false
test**** ==> false
test***5 ==> false
test**4* ==> false
*3** ==> false
Объяснение регулярного выражения:
^
-- якорь в начале строки(?:
-- начать группу без захвата (для логического ИЛИ)
[a-z\d*]*[a-z\d]{4}
-- разрешить буквенно-цифровые символы и звездочку, за которыми следуют 4 буквенно-цифровых символа|
-- логическое ИЛИ
[a-z\d]{1,3}
-- разрешить от 1 до 3 буквенно-цифровых символов)
-- закрытая группа$
-- якорь в конце строкиНе то чтобы легче было читать и эффективнее использовать /.../ вместо new RegExp("..."). Вам нужен конструктор регулярного выражения, только если у вас есть переменный ввод.
Спасибо. В моем случае это сработало для меня. Это было четкое и краткое объяснение. Голосую за это, так как оно прошло все мои тестовые сценарии
Ваш вопрос неоднозначен относительно звездочек между первой и последней четырьмя позициями. Примеры тоже не дают ясности. А как насчет *1*2345, например?