Не работает паттерн

Рейтинг: 0Ответов: 1Опубликовано: 29.01.2023

var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$");
console.log(strongRegex.test("123456Gg!"));
console.log(strongRegex.test("123456Gg"));

Есть вот такой паттерн. Все работает. Ниже прикрепил код где я беру паттерн из тега в input

var test = document.getElementById("pass2");

var pattern = test.getAttribute("pattern");
const re = new RegExp(pattern);


console.log(re.test(test.value));
<input pattern="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$" type="password" value="123456Gg!" id="pass2" >

В данном случае паттерн возвращает false. Почему так происходит?

Ответы

▲ 1Принят

В данном случае паттерн возвращает false. Почему так происходит?

Потому что строки будущего регулярного выражения не равны

var test = document.getElementById("pass2");

var pattern = test.getAttribute("pattern");
console.log(pattern === "^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$");


const re = new RegExp(pattern);


console.log(re.test(test.value));
<input pattern="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$" type="password" value="123456Gg!" id="pass2" >

Равны они будут вот так (без одного обратного слеша \)

var test = document.getElementById("pass2");

var pattern = test.getAttribute("pattern");
console.log(pattern === "^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$");

const re = new RegExp(pattern);


console.log(re.test(test.value));
<input pattern="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$" type="password" value="123456Gg!" id="pass2" >