javascript正则表达式用空格验证字母数字文本并拒绝特殊字符

时间:2011-12-16 15:17:30

标签: javascript regex validation

我不是正则表达式的专家,但我尝试过验证一个字段,该字段允许使用空格但不包含任何其他特殊字符的字母数字数据。其中linkTitle是我在条件

中尝试使用以下正则表达式进行测试的变量的名称
/[^A-Za-z\d\s]/.test(linkTitle)
/[^A-Za-z0-9\s]/.test(linkTitle)
/[^A-Za-z\d ]/.test(linkTitle)

并且这些都没有奏效......我很想知道正则表达式使用\ s出了什么问题,似乎是指空白以及适合该法案的正则正则表达式。

提前致谢!!

2 个答案:

答案 0 :(得分:18)

我认为您希望匹配字符串一次的开头,然后使用Positive Closure - 一个或多个字母,空格或数字,然后是字符串的结尾。

/^[A-Za-z\d\s]+$/.test(linkTitle)

经过测试:

var reg = /^[A-Za-z\d\s]+$/;
["Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) {
    console.log(reg.test(str + "\n"));
});

显示truetruetruefalsefalse


或者如果你想允许空字符串,你可以使用相同的RegEx但使用Kleene Closure-零或更多的字母,数字或空格

var regAllowEmpty = /^[A-Za-z\d\s]*$/;
["", "Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) {
    console.log(regAllowEmpty.test(str + "\n"));
}); 

请注意,forEach不适用于旧浏览器 - 这仅用于测试

答案 1 :(得分:1)

此处的三个正则表达式中的任何一个都会匹配[]之间的任何单个字符,当然不包括^

问题可能来自您解释test()提供的结果的方式。如果正则表达式匹配字符串linkTitletest返回true;这意味着输入中有一个错误的字符(既不是大写字母,也不是小写字母,不是数字而不是空格)。

测试了你的正则表达式:

/[^A-Za-z\d\s]/.test('0 '); // no match, false, input is ok
/[^A-Za-z\d\s]/.test('0 $'); // match, true, input is wrong