【问题标题】:Regex: only alphanumeric but not if this is pure numeric正则表达式:只有字母数字,但如果这是纯数字则不是
【发布时间】:2012-08-02 07:59:12
【问题描述】:

例如:

'1'     => NG
'243'   => NG
'1av'   => OK
'pRo'   => OK
'123k%' => NG

我试过了

 /^(?=^[^0-9]*$)(?=[a-zA-Z0-9]+)$/

但效果不是很好。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    使用

    /^(?![0-9]*$)[a-zA-Z0-9]+$/
    

    这个表达式有一个否定的前瞻来验证字符串不仅仅是数字。与RegExr 一起查看它的实际效果。

    【讨论】:

    • 在 regexr 中这有效,但在 Java 中使用验证 @Pattern(regex="...") 它对我不起作用。也许这并非在所有正则表达式实现中都可用?
    【解决方案2】:

    所以我们知道某处必须至少有一个“字母”字符:

    [a-zA-Z]
    

    它之前或之后可以有任意数量的字母数字字符(包括零),所以我们用[a-zA-Z0-9]*在两边填充:

    /^[a-zA-Z0-9]*[a-zA-Z][a-zA-Z0-9]*$/
    

    这应该可以解决问题。

    【讨论】:

      【解决方案3】:

      试试这个:

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

      编辑:因为这与公认的答案基本相同,所以我会给你一些不同的东西:

      /^\d*[a-zA-Z][a-zA-Z\d]*$/
      

      没有前瞻,没有重复的复杂组,它只是验证至少有一个字母字符。这应该很快。

      【讨论】:

      • 第二个有效,它只排除数字,谢谢!它仍然不只排除字母。
      【解决方案4】:

      试试这个:^(?!\d+\b)[a-zA-Z\d]+$
      (?!\d+\b) 将避免纯数字,添加 \w+ 然后混合字母和数字。

      【讨论】:

      • 感谢您的评论,应该改为 ^(?!\d+\b)[a-zA-Z\d]+$
      • 你可以编辑你的答案。如果你这样做,你会得到我的 +1。
      • 其实不,\b 是个好主意。这样一来,正则表达式测试之前会因“123#test”之类的无效字符串而失败,因为先行先行失败。使用$ 前瞻不会失败。
      【解决方案5】:

      这应该可以解决问题,无需向后看:

      ^(\d*[a-zA-Z]\d*)+$
      

      【讨论】:

      • 尝试不使用捕获组。顺便说一句,Javascript 只支持前瞻。
      【解决方案6】:

      试试这个:^[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*$

      【讨论】:

      • 请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。
      【解决方案7】:

      这是严格的字母数字

      String name="^[^a-zA-Z]\\d*[a-zA-Z][a-zA-Z\\d]*$";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 2011-09-16
        • 2014-05-24
        相关资源
        最近更新 更多