JavaScript正则表达式:仅匹配字母、数字和下划线。

19
我想检查文本框输入是否有效(只允许字母、数字和下划线,不允许空格或破折号)。我目前有这个代码,但是空格和破折号好像能够通过。
我希望检验文本框输入是否有效(只允许使用字母、数字和下划线,不允许使用空格或连字符)。我目前有以下代码,但用空格和连字符测试时也会通过:
function validText(field)
{
    var re = /[a-zA-Z0-9\-\_]$/
    if (field.value.search(re) == -1)
    {
        alert ("Invalid Text");
        return false;
    }
}

一个有效的输入应该像这样:

'Valid_Input123'

无效

'Invalid-Input !'

6
提示:[a-zA-Z0-9_] == \w - elclanrs
3
或许短横线出现是因为你在文字中包含了短横线字符。 - cookie monster
它不是破折号,它表示从a到z的所有字母。 - Haris Muzaffar
4个回答

35
  1. \w是一个方便的正则表达式转义序列,覆盖了字母、数字和下划线字符
  2. 您应该通过将有效性测试锚定在表达式的开头(^)和结尾($)来测试整个字符串的有效字符
  3. 正则表达式的test方法比字符串的search方法更快
  4. 您还可以使用数量词+测试一个或多个字符

总结(代码)

var re = /^\w+$/;
if (!re.test(field.value)) {
    alert('Invalid Text');
    return false;
}
return true;

或者,您可以使用以下方法测试任何无效字符:

/\W/.test(field.value)

\W 表示除了字母、数字或下划线字符以外的任何字符。

然后,您可能还需要添加长度检查来使空字符串无效,例如:

if (/\W/.test(field.value) || field.value.length === 0)

OP在他的字符类中指定了一个连字符。 - Vasili Syrakis
@VasiliSyrakis OP 也说(我引用):“只允许字母、数字和下划线。不允许空格或破折号。” - Phil
@VasiliSyrakis 但这与帖子的其余部分相矛盾:“仅允许使用字母、数字和下划线。不允许使用空格或破折号”。 - Ian
3
@Phil 这个回答如果加上解释会更好。 - Daedalus
是的,我想我只是看了连字符,没有意识到它可能是一个意外。糟糕。 - Vasili Syrakis
显示剩余2条评论

13

你只是在测试文本结尾$)是否有字符集中的一个字符。你还明确允许破折号(\-)。如果不想要它,就将其删除。

使用锚点表达式(^$),添加量词符(+)并.test测试字符串是否仅由这些字符组成:

var re = /^[a-zA-Z0-9_]+$/; // or /^\w+$/ as mentioned
if (!re.test(field.value)) {

}

4
  1. 你忘记在正则表达式开头使用^进行锚定。
  2. test更易于使用。
  3. 没有必要使用破折号。

应该像这样:

if (!/^[a-z0-9_]+$/i.test(field.value)) {
    //
}

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接