我有一個要求,使一個驗證以下幾點對斯威夫特的字母數字字符串正則表達式,我對如何實現這些目標沒有線索:正則表達式,沒有連續的字母和數字
不超過連續4個字母或數字字符
(如12345a或1abcde將是錯誤的,但123a45或abcd1e是正確的)
不超過4相同的字母數字字符的
(例如111a11或aaaa1a將是錯誤的)
恰好6個字符
幫助將不勝感激,謝謝。
我有一個要求,使一個驗證以下幾點對斯威夫特的字母數字字符串正則表達式,我對如何實現這些目標沒有線索:正則表達式,沒有連續的字母和數字
不超過連續4個字母或數字字符
(如12345a或1abcde將是錯誤的,但123a45或abcd1e是正確的)
不超過4相同的字母數字字符的
(例如111a11或aaaa1a將是錯誤的)
恰好6個字符
幫助將不勝感激,謝謝。
正如其他人所指出的,你的第二個要求是很難單獨使用正則表達式來完成,而第一和第三是可以做到的:
^
(?!\D*\d{5,}\D*)
(?![^A-Za-z]*[A-Za-z]{5,}[^A-Za-z]*)
.{6}
$
我結束了使用你的正則表達式加上一個小函數來驗證第二點,謝謝你的幫助Jan –
做整體的工作,在每一個簡單的步驟: 注:這是一個JavaScript的解決方案,但你可以轉換爲您所選擇的語言遵循同樣的邏輯:
var str = "ss4sss";
fnTest = function(str){
var isValid = true;
if(/\d{5,}/.test(str)){// no more than 4 consecutive numeric chars
return false;
}else if(/[a-z]{5,}/i.test(str)){// no more than 4 consecutive alpha chars
return false;
}else if(str.length !== 6){// not 6 characters
return false;
}else{ // any character used more than 4 times
var reg = /([\w\W])/g;
var arrM ;
var obj = {};
while(arrM = reg.exec(str)){
var letter = arrM[1];
if(!obj[letter]){
obj[letter] = 0;
}
obj[letter]++;
if(obj[letter] > 4){
isValid = false;
break;
}
}
}
return isValid;
}
fnTest(str);
我用一個非常相似的方法來驗證第二點,謝謝花時間回答。 –
是您的需求做一個正則表達式或執行這些限制?特別是第二部分是* regular *正則表達式不是爲了設計。總之,所有的正則表達式看起來都是這些需求的錯誤工具。 – luk2302
as @ luk2302在他的評論中指出,即使只有條件1和條件3,這種方法也很複雜,您應該使用替代方案來解決這個問題 –
要求是如果您不介意,可以執行這些限制你建議我一個更好的工具來獲得我所提到的? –