我需要一个验证,测试包含5个唯一字符的字符串,并且长度至少为7个字符.
我已经尝试了以下正则表达式:
^[a-zA-Z][0-9]{7}$
我卡住了,不知道如何进行验证,以便字符串包含至少5个唯一字符.
我不认为这很容易检查你是否有一个正则表达式至少有5个独特的字符,所以我使用另一种方法.
我检查有preg_match()
,你的字符串只包含来自该字符的字符类 [a-zA-Z0-9]
和至少7个字符长,我用支票量词:{7,}
.
然后为了确保你有> = 5个唯一字符,我将你的字符串拆分成一个数组str_split()
,获取所有唯一字符array_unique()
并检查count()
是否有> = 5个唯一字符,例如
if(preg_match("/^[a-zA-Z0-9]{7,}$/", $input) && count(array_unique(str_split($input))) >= 5) { //good } else { /bad }
因为,不清楚你是否想要在php或javascript中执行验证,使用Javascript添加类似的代码.
var regex = /^[a-zA-Z0-9]{7,}$/;
// Adding method on prototype, so that can be invoked on array
Array.prototype.unique = function() {
var arr = this; // Cache array
// Return the array by removing duplicates
return this.filter(function(e, i) {
return arr.indexOf(e) === i;
});
};
// Binding keyup event on textbox(Demo Purpose)
document.getElementById('text').addEventListener('keyup', function(e) {
var str = this.value; // Get value
this.classList.remove('invalid'); // Remove classes
// Check if regex satisfies, and there are unique elements than required
if (regex.test(str) && str.split('').unique().length >= 5) {
console.log('Valid');
this.classList.add('valid'); // Demo Purpose
} else {
console.log('Invalid');
this.classList.add('invalid'); // Demo Purpose
}
}, false);
.valid {
border: solid 1px green;
}
.invalid {
border: solid 1px red;
}