Проверьте, соответствует ли строка регулярному выражению в JS

753

Я хочу использовать JavaScript (может быть с jQuery), чтобы выполнить некоторую проверку на стороне клиента, чтобы проверить, соответствует ли строка регулярному выражению:

^([a-z0-9]{5,})$

В идеале это было бы выражение, которое возвращало истину или ложь.

Я новичок в JavaScript, match()делаю то, что мне нужно? Кажется, чтобы проверить, соответствует ли часть строки регулярному выражению, а не все.

Ричард
источник
Вы хотите полное совпадение или просто содержит ли строка соответствующую подстроку?
Керрек С.Б.
1
Полное совпадение - не совпадающая подстрока.
Ричард

Ответы:

1197

Используйте, regex.test()если все, что вы хотите, это логический результат:

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

... и вы можете удалить ()из своего регулярного выражения, так как вам не нужно захватывать.

user113716
источник
1
Что там делает начальное ^ в регулярном выражении?
PedroD
8
@PedroD ^ подразумевает начало или начинается с
Нагараджу
Так как бы вы поступили наоборот? "не начинается с ..."
PedroD
3
@stackdave, возможно, вы работаете с Java, а не с JavaScript?
сфарбота
177

Используйте test()метод:

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}
Абхиджит Касурде
источник
3
Обратите внимание, что версия с RegExpпозволяет вводить значения переменных в строку регулярного выражения.
Кристоф Русси
2
пришлось убрать двойные кавычки new RegExp("^([a-z0-9]{5,})$"), чтобы заставить его работать
Факундо Коломбье
98

Вы также можете использовать match():

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

Но, test()кажется, быстрее, как вы можете прочитать здесь .

Важная разница между match()и test():

match()работает только со строками, но test()работает и с целыми числами.

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true
pmrotule
источник
Причина, по которой он работает с числом, заключается в том, что число приводится в строку, потому что оно дается в качестве параметра, когда оно ожидает строку. Я бы не стал полагаться на это поведение. Это зависит от реализации test () в вашей среде. (совпадение не удается, потому что номера не имеют matchчлена). Я бы рекомендовал явно преобразовать ваш номер в строку, если вы хотите использовать его с регулярным выражением ( String(123)например).
Бронздрагон
Сопоставление можно использовать здесь, но если вы посмотрите на производительность, она testработает на 30% лучше, когда мы просто хотим проверить строку на соответствие регулярному выражению, а не извлекать из нее подстроки.
Аканш
@pmrotule Да, но это должно быть упомянуто перед описанием матча.
Аканш
Наиболее существенное различие между test и match (и matchAll) заключается в том, что match возвращает вещи со всеми соответствующими подстроками, в то время как test только проверяет, есть ли они. Проверьте методы регулярных выражений в javascript.info/regexp-methods
Хуан Ланус
50

Используйте, /youregexp/.test(yourString)если вы хотите знать, соответствует ли ваша строка регулярному выражению.

user278064
источник
8

Вот пример, который ищет определенные теги HTML, поэтому ясно, что он /someregex/.test()возвращает логическое значение:

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');
user2449231
источник
6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));
Eysun
источник
2

Вы можете попробовать это, это работает для меня.

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>
Тонги
источник
1

пожалуйста, попробуйте этот цветок:

/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');

правда

Джабер Альшами
источник
1

пытаться

 /^[a-z\d]{5,}$/.test(str)

Камил Келчевски
источник
2
Какое новое значение дает этот ответ только для кода на страницу?
mickmackusa
В настоящее время это
самое
1
Бритье одного персонажа из шаблонов, опубликованных несколько лет назад. Йон.
mickmackusa
2
Просто оставьте комментарий под более ранним ответом, чтобы заявить, что 0-9можно уменьшить aaaaaaaaaaaaaaaaaaaaa, вплоть до \d. О, и что группа захвата не нужна.
mickmackusa
1

Я бы рекомендовал использовать метод execute, который возвращает null, если совпадений не существует, в противном случае он возвращает полезный объект.

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]
Хуан Наваррете
источник
0
const regExpStr = "^([a-z0-9]{5,})$"
const result = new RegExp(regExpStr, 'g').test("Your string") // here I have used 'g' which means global search
console.log(result) // true if it matched, false if it doesn't
Гетаншу Гулати
источник