字母组合的正则表达式;带/特殊字符的数字

时间:2013-09-19 15:20:27

标签: regex

我希望正则表达式符合以下条件,

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

    1. test1234
    2. 测试@ 1234
    3. 1234Test
    4. 提前致谢。 这是我的代码

      NSPredicate *regex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^(?[0-9])(?[a-zA-Z]){7,}$"];
      
      BOOL isvalid = [regex evaluateWithObject:string];
      
      抱歉,我找不到以前用过的正则表达式。

2 个答案:

答案 0 :(得分:6)

您已接近评论中第二个示例中的前瞻。你所拥有的是一个数字[0-9],但它说它必须从那个数字开始(不检查你的字母)。

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

使用your examples listed我做了一些测试。正则表达式是你找到的两者的组合。

  1. 预测并查看是否至少有一个字母或数字 (?=.*[a-zA-Z\d].*)。通过让.*允许在字符串中的任何一点传递检查,而不仅仅是开头。然后你说正则表达式需要在它继续之前完成检查。可以把它想象成一个if子句,如果字符串在任何一点都包含一个字母或数字,那就继续。

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

答案 1 :(得分:3)

对于至少一件事,你可以使用lookahead。你似乎已经弄明白了其余的(字符类,重复,锚点)。

/^(?=.*[a-z0-9])[a-z0-9!@#$%&*.]{7,}$/i