只有letterNumber而不是所有数字

adi*_*dit 4 javascript regex

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

/^[0-9a-zA-Z]+$/
Run Code Online (Sandbox Code Playgroud)

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

08128912382
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Tib*_*bos 7

"必须只包含字母和数字,并且至少包含一个字母"等同于"必须包含由数字或字母包围的字母":

/^[0-9a-zA-Z]*[a-zA-Z][0-9a-zA-Z]*$/
Run Code Online (Sandbox Code Playgroud)

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

通过几个推动,您最终会得到其他不同的答案(分别由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+$)/ - 匹配任何不包含数字的字符串的开头

第二和第三个解决方案也应该与您的原始正则表达式结合使用,该正则表达式验证字符串是否只包含您想要的字符(字母和数字)

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


Tom*_*lak 5

预见可以做到:

/^(?=.*[a-z])[0-9a-z]+$/i
Run Code Online (Sandbox Code Playgroud)