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

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 шт):

Автор решения: ksa

В данном случае паттерн возвращает 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" >

→ Ссылка