RegEx表示字母数字字符,但不仅仅是数字字符

时间:2016-03-22 15:47:35

标签: javascript regex

我需要JavaScript中的RegEx才能为HTML表单执行以下匹配:

  1. Abc123 - 接受
  2. Abc - 接受
  3. 123 - 不接受
  4. 我做错了吗?

    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="";
    }
    

5 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式

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

此表达式具有负向前瞻以确保字符串不仅包含数字。

点击这里的演示:

Demo

在编辑后给出你的代码,如果你想检查给定的字符串是否与正则表达式匹配,你可以这样做:

Demo

答案 1 :(得分:2)

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

<tbody>
    <!-- ko foreach: listOfCustomers-->
        <tr class="clickable-row">
            <td> <span class="glyphicon glyphicon-move"></span></td>
            <td class="text"><button type="button" class="bananen" onclick="App.CustomersScreen.onAfterRenderFunc();"></button></td>
            <td class="text" data-bind="text: name"></td>
            <td class="text" data-bind="text: town"></td>
            <td class="text" data-bind="text: mail"></td>
            <td class="text" data-bind="text: phone"></td>
            <td class="text">Motor</td>
            <td class="text"><span class="glyphicon glyphicon-exclamation-sign"></span></td>
            <td data-visible="false"
        data-switchable="false" class="hidden" data-bind="text: id"></td>
        </tr>
    <!-- /ko -->
</tbody>

RegEx Demo

RegEx分手:

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

答案 2 :(得分:1)

这是另一种方法,它要求regexp匹配两个备选方案中的任何一个,第一个是全数字字符串,第二个是混合字母数字字符串。我们使用名为“alternation”(|)的正则表达式功能在它们之间进行选择;这基本上就像regexp的OR版本。

/^\d*$|^\w*$/

这很清楚,但我们想要拒绝第一种选择,同时接受第二种选择。要做到这一点,我们捕获第二种选择,使用括号,但不是第一种:

/^\d*$|^(\w*)$/
  ^^^              don't capture this (123)
        ^^^^^      capture this (123abc456)

现在,当我们使用match匹配字符串时,我们可以通过查看是否填充了捕获组来判断右侧是否匹配。可能更容易展示它:

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

这种技术可能会或可能不会比在这个特定情况下的其他答案中提出的替代方案更好,但是当你想要匹配某些东西而排除某些情况时,它是一种有用的技术。

答案 3 :(得分:0)

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

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

<强>解释

  • (?=.*[A-Za-z])如果字符串中的任何地方都有字母,则向前看。如果是,那么它匹配正则表达式的下一部分。

<强>输出

  • 不匹配:123 _123 123_

  • 匹配:a_123 a12_3 asd as_j a_

<强> Regex101 Demo

答案 4 :(得分:0)

我不确定你想要存档什么,但我想你可以使用像

这样的简单正则表达式
^([0-9])*[a-zA-Z]+[a-zA-Z0-9]*$

匹配不以数字开头的内容,以字母(大写或小写)开头一次或多次,然后匹配字母数字0次或更多次。

http://regexr.com/3d2gl

关于您提供的代码,您需要使用相反的逻辑。如果匹配,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";
}
(...)

(...)
else if( eventName.match(/^(?![0-9]*$)[a-zA-Z0-9]+$/) )
{
    // Username is valid, do your logic here.
}
(...)