表达“至少一个非数字”的正则表达式

时间:2010-01-24 04:08:53

标签: ruby regex

我想根据此架构验证用户名:

  1. 允许的字符:字母,数字,连字符,下划线
  2. 第一个字符必须是字母或数字
  3. 用户名不能是所有数字
  4. 这个正则表达式满足上面的1和2,但我无法弄清楚如何满足3:

    /^[a-zA-Z\d][\w\-]+$/
    

    (我正在使用Ruby,如果那是相关的)

5 个答案:

答案 0 :(得分:11)

效率不高,但很简单:

/^(?!\d+$)[a-zA-Z\d][\w\-]+$/

前瞻只是意味着:“接下来的内容不是直到结尾的一串数字。”

答案 1 :(得分:1)

不理想,但很简单:使用正则表达式/^.*[a-zA-Z_\-].*$/

进行第二次传递

确保它通过两者并且你会没事的。

答案 2 :(得分:1)

如果你可以进行两次传球,那么更简单,更快的第二次传球正则表达式为:

/[^\d]/

这只匹配任何不是数字的东西,它只需要匹配一个并且它会提前终止。你真的不需要在这里严格,因为第一遍已经拒绝了不允许的字符。

答案 3 :(得分:0)

我会使用验证所需的正则表达式,然后使用:

passwd.to_i.to_s.length != passwd.length

验证passwd在通过主要验证后不是数字字符串。

答案 4 :(得分:0)

另一种方式,虽然它可能不如Max的表现好:

/^[a-z0-9][-\w]*[-_a-z][-\w]*$/i