字母数字正则表达式 JavaScript

3
我在JavaScript中遇到了一个问题,无法得到仅包含字母数字字符的简单正则表达式:
var validateCustomArea = function () {
        cString = customArea.val();
        var patt=/[0-9a-zA-Z]/;
        if(patt.test(cString)){
            console.log("valid");
        }else{
            console.log("invalid");
        }
    }

我正在使用jQuery检查文本字段值的keyup事件,但结果并不符合预期,我只希望字符串中有字母和数字。

你的第三行应该加上一个分号,不是吗? - Dan
代码运行正常,只是结果不正确。 - Saher Ahwal
@Dan:实际上,在JavaScript中分号是可选的。 - mu is too short
我猜测上面的正则表达式检查你的字符串中是否存在任何字符,但我希望我的字符串只包含字母和数字。 - Saher Ahwal
2
@muistooshort 如果我错了,请纠正我,但它们大多数时候不是可选的吗?有时候它们是必需的,因此养成始终使用它们的好习惯。 - AlienWebguy
@Alien:当没有歧义时,可选的内容几乎是所有时间。但是除了像 function() { return 11 } 这样的情况之外,省略它们并不是一个好主意。 - mu is too short
3个回答

7

这个正则表达式:

/[0-9a-zA-Z]/

将匹配任何包含至少一个字母或数字字符的字符串。我认为你需要这个:

/^[0-9a-zA-Z]+$/
/^[0-9a-zA-Z]*$/ /* If you want to allow "empty" through */

也可能是这样的:
var string = $.trim(customArea.val());
var patt   = /[^0-9a-z]/i;
if(patt.test(string))
    console.log('invalid');
else
    console.log('valid');

2
我这样修复了它。
var validateCustomArea = function () {
        cString = customArea.val();
        console.log(cString)
        var patt=/[^0-9a-zA-Z]/
        if(!cString.match(patt)){
            console.log("valid");
        }else{
            console.log("invalid");
        }
    }

我需要对正则表达式进行取反


2

您的函数只检查一个字符(/[0-9a-zA-Z]/ 意味着0-9,a-z或A-Z中的任意一个字符),但读取整个输入字段文本。您需要循环此操作或通过使用 /^[0-9a-zA-Z]*$/ 这样的表达式检查字符串中的所有字符。我建议使用后者。


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