只有letterNumber而不是所有数字

时间:2014-01-09 11:35:34

标签: javascript regex

我知道如何使用正则表达式验证它是否只是字母编号而没有空格:

/^[0-9a-zA-Z]+$/

但是我如何添加到这个正则表达式,使它不能只包含数字,所以例如这是无效的:

08128912382

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

“必须只包含字母和数字,并且至少包含一个字母”相当于“必须包含数字或字母包围的字母”:

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

我想补充一点,这个答案显示了一种可以思考问题的方法,因此编写正则表达式更简单。它并不意味着是解决问题的最佳方案。我只是把你所拥有的东西给了它一个正确方向的推动。

有几个推动,你最终会得到其他不同的答案(分别由ZER0,Tomalak和OGHaza发布):

  1. 您可能会注意到,如果第一组或最后一组中有一个字母,则中间部分会满意。换句话说,由于你有中间部分,你不需要在第一个或最后一个部分允许字母(但不能同时允许两个!):

    • /^[0-9]*[a-zA-Z][0-9a-zA-Z]*$/ - 一些数字,后跟一个字母,后跟一些数字和字母
    • /^[0-9a-zA-Z]*[a-zA-Z][0-9]*$/ - 相当于你从头到尾阅读
  2. 了解前瞻,你可以断言字符串中至少有一个字母:

    • /^(?=.*[a-z])/ - 匹配包含至少1个字母
    • 的任何字符串的开头
  3. 或者反过来说,正如你所表达的那样,断言字符串中不仅有数字:

    • /^(?!\d+$)/ - 匹配任何不包含数字
    • 的字符串的开头
  4. 第二和第三个解决方案也应该与您的原始正则表达式结合使用,该正则表达式验证字符串是否只包含您想要的字符(字母和数字)

    我特别喜欢第二种解决方案,我相信迄今为止所有尝试中最快的方法。

答案 1 :(得分:5)

预见可以做到:

/^(?=.*[a-z])[0-9a-z]+$/i

答案 2 :(得分:2)

我认为最优雅的解决方案是负面的先行,以检查它不仅仅是数字

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

RegExr Example

答案 3 :(得分:1)

所以基本上你需要在字符串中至少有一个字母。在这种情况下,您可以检查是否存在一个或多个字母,可能前面有一个或多个数字,并且可能后跟两个字母:

/^[0-9]*[a-z][0-9a-z]*$/i

请注意,如果您对true这样的字符串进行测试,它将返回"A",因为在这种情况下,所有数字都被认为是可选的。