這個問題在這里已經有了答案: Javascript Regex:如何將變數放入正則運算式中?[重復] (9個答案) 昨天關門。
此帖已于17 小時前編輯并提交審核,但未能重新打開該帖:
原始關閉原因未解決
嗨,我有以下代碼
const containsAtLeastDigits = (digits, password) => {
const regex = new RegExp(/(?=.{6}).*/g);
if (regex.test(password)) {
console.log("yes");
return false;
} else {
console.log("no");
}
};
containsAtLeastDigits(6, "abcdefg");
在這里,我必須將在正則運算式中定義為 {6} 的引數數字傳遞為像 ${digits} 這樣的插值。有人可以解釋一下這是否可行嗎?我在 StackOverflow 本身中看到了一些答案,但它們不起作用。我對正則運算式格式做錯了嗎?
uj5u.com熱心網友回復:
您可以將字串傳遞給RegExp建構式,而不是正則運算式文字:
const regex = new RegExp(`(?=.{${digits}}).*`, "g");
注意:使用正則運算式來測驗字串的長度似乎有點矯枉過正。你可以簡單地使用:
const containsAtLeastDigits = (digits, password) => password?.length >= digits;
uj5u.com熱心網友回復:
請注意,該模式(?=.{6}).*不檢查 6 位數字。它斷言任何字符6次,然后匹配整行,可以寫成.{6}
如果您想知道字串中是否有 6 個連續數字,則可以使用 \d{6}
在這種情況下,您不需要全域修飾符/g或“g”,因為您只需檢查一次。
如果您想知道字串中是否有 6 位數字:
^[^\d\n]*(?:\d[^\d\n]*){6}
正如已經指出的,您可以將引數添加到 RegExp 建構式。
const containsAtLeastDigits = (digits, password) => {
const regex = new RegExp(`^[^\\d\\n]*(?:\\d[^\\d\\n]*){${digits}}`);
return regex.test(password);
};
console.log("Contains at least 6 digits:");
console.log("---------------------------");
[
"a1a2a3a4a5a6a4",
"a1b2c",
"12345678"
].forEach(s => console.log(s " --> " containsAtLeastDigits(6, s)));
或者
const containsConsecutiveDigits = (digits, password) => {
const regex = new RegExp(`\\d{${digits}}`);
return regex.test(password);
};
console.log("Contains at least 6 consecutive digits:");
console.log("---------------------------");
[
"a1a2a3a4a5a6a4",
"a1b2c",
"12345678"
].forEach(s => console.log(s " --> " containsConsecutiveDigits(6, s)));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/416000.html
標籤:
上一篇:獲取變數的所有先前值
