判断字符串中的数字是否相同,连续
先说一下我对这个问题的解决思路:
- 我们先进行判重,怎么进行判重呢,首先我们需要把字符串中的数字切割成单独的数字,放入到数组中,这样你是不是有点思路了呢?我们可以利用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})后面不能六位数字相同

浙公网安备 33010602011771号