Как использовать регулярное выражение, чтобы разрешить пустую строку или минимум 6 символов?

#javascript #regex

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

Вопрос:

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

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

 let regexToTestName = /^[a-zA-Z0-9.!@#$%^amp;*()_-]{6,}$/g;
let usedName = ''; //or let usedName = 'atLeast6Char';
let isNameMatch = regexToTestName.test(usedName);
 

Как вы можете видеть, это будет работать для символов, указанных длиной не менее 6. Но как мне также получить истинное значение, если это пустая строка?

Ответ №1:

Просто сделайте вашу строку необязательной с помощью ? :

 /^(S{6,})?$/
 
 var re = /^(S{6,})?$/

console.log('', re.test(''));
console.log('a', re.test('a'));
console.log('abcde', re.test('abcde'));
console.log('abcdefg', re.test('abcdefg')); 

Ответ №2:

Следующее выражение будет соответствовать всей строке ^ $ для любого символа . , если {0} их есть (пустая строка), или | оно будет соответствовать 6 или более {6,} , указав диапазон только с индексом «from», запятой и без индекса «to». Выражение «или» должно быть заключено в группу ( ) .

 var re = /^(.{0}|.{6,})$/;

console.log('', re.test(''));
console.log('1', re.test('1'));
console.log('12', re.test('12'));
console.log('123', re.test('123'));
console.log('1234', re.test('1234'));
console.log('12345', re.test('12345'));
console.log('123456', re.test('123456'));
console.log('1234567', re.test('1234567'));
console.log('12345678', re.test('12345678')); 

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

1. В процессе обновления.

Ответ №3:

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

 ^([/w]{6,0})|([w]{0,0})$