我和我的同事嘗試構建一個正則運算式(Javascript)來驗證特定格式的輸入欄位。該欄位應該是一個以逗號分隔的埠宣告串列,可能如下所示:
TCP/53,UDP/53,TCP/10-20,UDP/20-30
我們嘗試了這個正則運算式:
/^[TCP/\d ,|UDP/\d ,|TCP/\d -\d ,|UDP/\d -\d ,]*[TCP/\d |UDP/\d |TCP/\d - \d |UDP/\d -\d ]$/g
正則運算式匹配,但也匹配其他字串,比如這個:
TCP/53UDP53,TCP/10-20UDP20-30
感謝您的任何指導!
uj5u.com熱心網友回復:
您不需要所有這些交替,并且[ ]不用于這樣的分組。您還-可以使用分組將和數字部分設為可選(?:...)?
要匹配該字串格式:
^(?:TCP|UDP)\/\d (?:-\d )?(?:,(?:TCP|UDP)\/\d (?:-\d )?)*$
模式匹配:
^字串的開始(?:TCP|UDP)匹配其中一個選項\/\d (?:-\d )?匹配/1 位和可選的-1 位(?:非捕獲組作為一個整體重復,(?:TCP|UDP)\/\d (?:-\d )?匹配 a,并重復相同的模式
)*關閉非捕獲組并選擇性地重復(如果應該至少有 1 個逗號,請將*其更改為)$字串結束
正則運算式演示
uj5u.com熱心網友回復:
替代方案:拆分字串,使用Array.filter和一個相對簡單RegExp的測驗。
const valid = `TCP/53,UDP/53,TCP/10-20,UDP/20-30`;
const invalid = `TCP/53UDP53,TCP/10-20UDP20-30`;
console.log(`${valid} ok? ${checkInp(valid)}`);
console.log(`${invalid} ok? ${checkInp(invalid)}`);
function checkInp(str) {
return str.split(`,`)
.filter(v => /^(TCP|UDP)\/\d (?:-\d )*$/.test(v))
.join(`,`)
.length === str.length;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/409769.html
標籤:
