Javascript 用于字母数字字符的正则表达式,但不限于数字字符

Javascript 用于字母数字字符的正则表达式,但不限于数字字符,javascript,regex,Javascript,Regex,我需要一个HTML表单的JavaScript正则表达式来进行以下匹配: Abc123-接受 Abc-接受 123-不接受 我做错什么了吗 if(eventName == "" || eventName == null) { errorCount++; document.getElementById('error1').innerHTML="Please Enter the Event Name"; } else if(eventName.match(/^(?![0-9]*$)[a

我需要一个HTML表单的JavaScript正则表达式来进行以下匹配:

  • Abc123-接受
  • Abc-接受
  • 123-不接受
  • 我做错什么了吗

    if(eventName == "" || eventName == null)
    {
        errorCount++;
        document.getElementById('error1').innerHTML="Please Enter the Event Name";
    }
    else if(eventName.match(/^(?![0-9]*$)[a-zA-Z0-9]+$/))
    {
        errorCount++;
        document.getElementById('error1').innerHTML="Please Enter a Valid Name";
    }
    else
    {
        document.getElementById('error1').innerHTML="";
    }
    

    您可以使用
    lookahead
    检查是否存在字母字符

    正则表达式:
    ^(?=.[A-Za-z])\w+$

    说明:

    ^         # start
    \w*?      # Match 0 or more word characters (non-greedy)
    [a-zA-Z]  # Match an English alphabet 
    \w*       # Match 0 or more word characters
    $         # end
    
    • (?=.[A-Za-z])
      如果字符串中的任何位置都有字母,则此将向前看。如果是,则与正则表达式的下一部分匹配
    输出

    • 不匹配:
      123
      \u 123
      123

    • 匹配:
      a\u 123
      a12\u 3
      asd
      as\u j
      a\u


    您可以使用
    先行检查
    来检查是否存在字母字符

    正则表达式:
    ^(?=.[A-Za-z])\w+$

    说明:

    ^         # start
    \w*?      # Match 0 or more word characters (non-greedy)
    [a-zA-Z]  # Match an English alphabet 
    \w*       # Match 0 or more word characters
    $         # end
    
    • (?=.[A-Za-z])
      如果字符串中的任何位置都有字母,则此将向前看。如果是,则与正则表达式的下一部分匹配
    输出

    • 不匹配:
      123
      \u 123
      123

    • 匹配:
      a\u 123
      a12\u 3
      asd
      as\u j
      a\u


    您可以使用此正则表达式确保至少有一个字母表:

    /^\w*?[a-zA-Z]\w*$/
    

    正则表达式分解:

    ^         # start
    \w*?      # Match 0 or more word characters (non-greedy)
    [a-zA-Z]  # Match an English alphabet 
    \w*       # Match 0 or more word characters
    $         # end
    

    您可以使用此正则表达式确保至少有一个字母表:

    /^\w*?[a-zA-Z]\w*$/
    

    正则表达式分解:

    ^         # start
    \w*?      # Match 0 or more word characters (non-greedy)
    [a-zA-Z]  # Match an English alphabet 
    \w*       # Match 0 or more word characters
    $         # end
    

    您可以使用这个正则表达式

    ^(?![0-9]*$)[a-zA-Z0-9]+$
    
    此表达式具有负前瞻性,以确保字符串不仅包含数字

    请在此处查看演示:

    根据编辑后的代码,如果要检查给定字符串是否与正则表达式匹配,可以执行以下操作:


    您可以使用此正则表达式

    ^(?![0-9]*$)[a-zA-Z0-9]+$
    
    此表达式具有负前瞻性,以确保字符串不仅包含数字

    请在此处查看演示:

    根据编辑后的代码,如果要检查给定字符串是否与正则表达式匹配,可以执行以下操作:


    我不确定您想要归档什么,但我想您可以使用一个简单的正则表达式,如

    ^([0-9])*[a-zA-Z]+[a-zA-Z0-9]*$
    
    将不以数字开头、以字母(大写或小写)开头的内容匹配一次或多次,然后将字母数字匹配零次或多次

    关于您提供的代码,您需要使用相反的逻辑
    eventName.match(/^(?[0-9]*$)[a-zA-Z0-9]+$/)
    如果匹配,即用户名有效,则返回true。所以你需要把它改成

    (...)
    else if( ! eventName.match(/^(?![0-9]*$)[a-zA-Z0-9]+$/) )
    {
        // Invalid username
        errorCount++;
        document.getElementById('error1').innerHTML="Please Enter a Valid Name";
    }
    (...)
    


    我不确定您想要归档什么,但我想您可以使用一个简单的正则表达式,比如

    ^([0-9])*[a-zA-Z]+[a-zA-Z0-9]*$
    
    将不以数字开头、以字母(大写或小写)开头的内容匹配一次或多次,然后将字母数字匹配零次或多次

    关于您提供的代码,您需要使用相反的逻辑
    eventName.match(/^(?[0-9]*$)[a-zA-Z0-9]+$/)
    如果匹配,即用户名有效,则返回true。所以你需要把它改成

    (...)
    else if( ! eventName.match(/^(?![0-9]*$)[a-zA-Z0-9]+$/) )
    {
        // Invalid username
        errorCount++;
        document.getElementById('error1').innerHTML="Please Enter a Valid Name";
    }
    (...)
    


    这里有一种替代方法,它要求regexp匹配两种替代方法中的任何一种,第一种是全数字字符串,第二种是字母数字混合字符串。我们使用名为“alternation”(
    |
    )的regexp特性在它们之间进行选择;这基本上类似于regexp版本的OR

    /^\d*$|^\w*$/
    
    这很清楚,但我们想拒绝第一种选择,同时接受第二种选择。为此,我们使用括号(而不是第一个)捕获第二个备选方案:

    /^\d*$|^(\w*)$/
      ^^^              don't capture this (123)
            ^^^^^      capture this (123abc456)
    
    现在,当我们使用
    match
    匹配字符串时,我们可以通过查看捕获组是否已填充来判断右侧是否匹配。可能更容易展示:

    function validate(str) {
      return /^\d*$|^(\w*)$/ . match(str)[1];
    }
    

    在这种特殊情况下,这种技术可能比其他答案中提出的备选方案好,也可能不好,但当您想在排除某些情况的同时匹配某些内容时,它是一种有用的技术。

    这里有一种替代方法,它要求regexp匹配两个备选方案中的任何一个,第一个是全数字字符串,第二个是字母数字混合字符串。我们使用名为“alternation”(
    |
    )的regexp特性在它们之间进行选择;这基本上类似于regexp版本的OR

    /^\d*$|^\w*$/
    
    这很清楚,但我们想拒绝第一种选择,同时接受第二种选择。为此,我们使用括号(而不是第一个)捕获第二个备选方案:

    /^\d*$|^(\w*)$/
      ^^^              don't capture this (123)
            ^^^^^      capture this (123abc456)
    
    现在,当我们使用
    match
    匹配字符串时,我们可以通过查看捕获组是否已填充来判断右侧是否匹配。可能更容易展示:

    function validate(str) {
      return /^\d*$|^(\w*)$/ . match(str)[1];
    }
    

    在这种特殊情况下,这种方法可能比其他答案中提出的备选方案好,也可能不好,但如果您想在排除某些情况的同时匹配某些内容,这种方法非常有用。

    这仍然允许在表单中使用数值,但不允许使用字母数字:/为什么
    (?=.*[A-Za-z].
    而不仅仅是
    (?=.*[A-Za-z]
    ?它仍然允许数字而不是字母numeric@torazaburo:我最初的想法是检查任何东西之间的字母表。
    (?=.*[A-Za-z])
    也有效。我认为你应该编辑你的问题,因为这个问题有一些解决方案不需要查找,比如anubhava的。此外,如果你有一些支持使用查找的论点,我很乐意听到。在我看来,应该尽可能避免使用这些论点,因为它们很难更具可读性,而且会拖拖拉拉性能确认(发动机需要检查e