先說一下我對這個問題的解決思路:
- 我們先進行判重,怎么進行判重呢,首先我們需要把字符串中的數字切割成單獨的數字,放入到數組中,這樣你是不是有點思路了呢?我們可以利用for循環,用數組中的第一個元素和其他元素一一進行比較,如果有不相等的說明這個字符串的數字是不相同的。
2. 再判斷數字是否連續的,這個需要我們分成兩部分來判斷:遞增連續、遞減連續。
2.1 判斷遞增連續,我們可以利用for循環進行操作,如果i>0在里面對arr[i]和arr[i-1] + 1 進行判斷是否相等,如果有一次不相等,就說明這個字符串不是連續遞增的。判斷遞減也可以依同樣的方式進行解決。
2.2 判斷遞減連續,利用for循環進行操作,如果i>0在里面對arr[i]和arr[i-1] - 1 進行判斷是否相等,如果有一次不相等,就說明這個字符串不是連續遞減的。
BOOL isTure = NO;//不符合規則,pincode是相同的或連續的
NSString *pincodeRegex = @"^(?=.*\\d+)(?!.*?([\\d])\\1{4})[\\d]{5}$";
NSPredicate *pincodePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pincodeRegex];
NSMutableArray * arr = [NSMutableArray arrayWithCapacity:0];
if ([pincodePredicate evaluateWithObject:pincode]) {
// 遍歷字符串,按字符來遍歷。每個字符將通過block參數中的substring傳出
[pincode enumerateSubstringsInRange:NSMakeRange(0, pincode.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
//將遍歷出來的字符串添加到數組中
[arr addObject:substring];
}];
BOOL isInscend = [CommonService judgeInscend:arr];
BOOL isDescend = [CommonService judgeDescend:arr];
if ( !isInscend && !isDescend) {
isTure = YES;
}
}
return isTure;
}
+ (BOOL)judgeInscend:(NSArray *)arr{
//遞增12345
int j = 0;
for (int i = 0; i<arr.count; i++) {
if (i>0) {
int num = [arr[i] intValue];
int num_ = [arr[i-1] intValue] +1;
if (num == num_) {
j++;
}
}
}
if (j == arr.count - 1) {
return YES;
}
return NO;
}
+ (BOOL)judgeDescend:(NSArray *)arr{
//遞減54321
int j=0;//計數歸零,用於遞減判斷
for (int i = 0; i<arr.count; i++) {
if (i>0) {
int num = [arr[i] intValue];
int num_ = [arr[i-1] intValue]-1;
if (num == num_) {
j++;
}
}
}
if (j == arr.count - 1) {
return YES;
}
return NO;
+ (BOOL)judgeEqual:(NSArray *)arr{
int j=0;
int firstNum = [arr[0] intValue];
for (int i = 0; i<arr.count; i++) {
if (firstNum == [arr[i] intValue]) {
j++;
}
}
if (j == arr.count - 1) {
return YES;
}
return NO;
}
+ (BOOL)judgeEqual:(NSArray *)arr{
BOOL flag = YES;
int firstNum = [arr[0] intValue];
for (int i = 0; i<arr.count; i++) {
if (firstNum != [arr[i] intValue]) {
flag = NO;
break;
}
}
return flag;
}
+ (BOOL)judgeInscend:(NSArray *)arr{
//遞增12345
BOOL flag = YES;
for (int i = 0; i<arr.count; i++) {
if (i>0) {
int num = [arr[i] intValue];
int num_ = [arr[i-1] intValue] +1;
if (num != num_) {
flag = NO;
break;
}
}
}
return flag;
}
+ (BOOL)judgeDescend:(NSArray *)arr{
//遞減54321
BOOL flag = YES;
for (int i = 0; i<arr.count; i++) {
if (i>0) {
int num = [arr[i] intValue];
int num_ = [arr[i-1] intValue]-1;
if (num != num_) {
flag = NO;
break;
}
}
}
return flag;
2
3
4
5
6
7
8
9
10
|
string
psw =
"111111"
;
//密碼
string
srt =
"0123456789_9876543210_abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_zyxwvutsrqponmlkjihgfedcba_ZYXWVUTSRQPONMLKJIHGFEDCBA"
;
if
(psw.Length != 6 || psw.Distinct().Count() == 1 || (!psw.Contains(
"_"
) && srt.Contains(psw)))
{
//不通過
}
else
{
//通過
}
|
判斷連續
1
2
3
4
5
6
7
8
|
if
(str.length<2){
return
false
;}
else
{
for
(
int
i=1;i<str.length;i++)
{
if
(abs(str[i]-str[i-1])==1) {
return
false
;}
//前后ascii碼差值絕對值為1表示連續
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function
checkRank(val){
if
(val.length<6||/^[0-9]{1,8}$/.test(val))
{
showPwRank(0);
return
0;
}
var
ls = 0;
if
(val.match(/[a-z]/g)){ ls++; }
if
(val.match(/[A-Z]/g)){ ls++; }
if
(val.match(/[0-9]/g)){ ls++; }
if
(val.match(/[^a-zA-Z0-9]/g)){ ls++; }
if
(val.length < 8 && ls > 1){ ls = 1; }
if
(ls>3) { ls=3; };
return
ls;
}
|
這個是用了兩個零寬斷言,按這個正則的話.*和.*?可以去掉,跟下面是一樣的結果
1
|
^(?=\d+)(?!([\d])\1{5})[\d]{6}$
|
^(?!([\d])\1{5})后面不能六位數字相同