Javascript 只有字母数字,但不是所有数字

Javascript 只有字母数字,但不是所有数字,javascript,regex,Javascript,Regex,我知道如何使用正则表达式验证它是否只是没有空格的字母编号: /^[0-9a-zA-Z]+$/ 但是我如何向这个正则表达式添加数据,使其不能只包含数字,例如,这是无效的: 08128912382 有什么想法吗?前瞻可以做到: /^(?=.*[a-z])[0-9a-z]+$/i “必须仅包含字母和数字,且至少包含一个字母”相当于“必须包含由数字或字母包围的字母”: 我想补充一点,这个答案展示了一种思考问题的方法,因此编写regexp更简单。这并不是解决这个问题的最好办法。我只是拿了你的东西,

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

/^[0-9a-zA-Z]+$/
但是我如何向这个正则表达式添加数据,使其不能只包含数字,例如,这是无效的:

08128912382

有什么想法吗?

前瞻可以做到:

/^(?=.*[a-z])[0-9a-z]+$/i
“必须仅包含字母和数字,且至少包含一个字母”相当于“必须包含由数字或字母包围的字母”:


我想补充一点,这个答案展示了一种思考问题的方法,因此编写regexp更简单。这并不是解决这个问题的最好办法。我只是拿了你的东西,朝正确的方向推了推

再推几下,你就会得到其他不同的答案(分别由ZER0、Tomalak和OGHaza发布):

  • 您可能会注意到,如果第一组或最后一组中有一个字母,则中间部分表示满意。换句话说,因为您有中间部分,所以不需要在第一部分或最后一部分中包含字母(但不能同时包含这两部分!):

    • /^[0-9]*[a-zA-Z][0-9a-zA-Z]*$/
      -一些数字,后面跟着一个字母,后面跟着一些数字和字母
    • /^[0-9a-zA-Z]*[a-zA-Z][0-9]*$/
      -如果您从末尾阅读,则相当于
  • 了解lookaheads后,您可以断言字符串中至少有一个字母:

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

    • /^(?!\d+$)/
      -匹配任何不包含数字的字符串的开头
  • 第二个和第三个解决方案还应与原始regexp结合使用,以验证字符串仅包含您希望它包含的字符(字母和数字)


    就我个人而言,我特别喜欢第二种解决方案,我认为这是迄今为止尝试的最快的解决方案。

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

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

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

    我认为最优雅的解决方案是使用负前瞻来检查它不仅仅是数字

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

    那么,如果字符串包含所有数字,则不返回任何内容?
    /^(?!\d+$)[0-9a-zA-Z]+$/