-1

我想要具有以下条件的正则表达式,

  1. 字符串中应该至少有一个字符或数字。
  2. 组合可能包含特殊字符,例如 !@#$%&*。
  3. 字符串长度应大于 7。

例如。

  1. 测试1234
  2. 测试@1234
  3. 1234测试

提前致谢。这是我的代码

NSPredicate *regex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^(?[0-9])(?[a-zA-Z]){7,}$"];

BOOL isvalid = [regex evaluateWithObject:string];

抱歉,我找不到以前使用的正则表达式。

4

2 回答 2

8

您与评论中第二个示例中的前瞻很接近。您所拥有的正在寻找一个 digit [0-9],但它说它必须以该数字开头(也不检查您的字母)。

尝试这个: ^(?=.*[a-zA-Z\d].*)[a-zA-Z\d!@#$%&*]{7,}$

使用您列出的示例,我对其进行了一些测试。正则表达式是您找到的两者的组合。

  1. 向前看,看看是否至少有一个字母或数字 (?=.*[a-zA-Z\d].*)。通过让.*您允许在字符串中的任何位置通过检查,而不仅仅是开头。然后你说正则表达式需要满足检查才能继续。将其视为 if 子句,如果字符串在任何时候都包含字母或数字,请继续。

  2. 一旦确保有一个字母或数字(整个字符串中至少有一个),就匹配字母、数字和一组特殊字符。至少7个[a-zA-Z\d\!@#\$%&\*]{7,}。。这部分很简单,因为您只需设置规则并说,至少给我其中的 7 个。

于 2013-09-19T15:52:28.897 回答
3

对于至少一件事,您可以使用lookahead。您似乎已经弄清楚了其余部分(字符类、重复、锚点)。

/^(?=.*[a-z0-9])[a-z0-9!@#$%&*.]{7,}$/i
于 2013-09-19T15:45:16.640 回答