繁体   English   中英

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

[英]javascript regex to validate alphanumeric text with spaces and reject special characters

我不是正则表达式的专家,但我试着验证一个字段,该字段允许使用带空格的字母数字数据而不是任何其他特殊字符。 其中linkTitle是我在条件中尝试使用以下正则表达式测试的变量的名称

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

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

提前致谢!!

我想你想匹配字符串的开头一次 ,然后使用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-zero或更多的字母,数字或空格

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不适用于旧浏览器 - 这仅用于测试

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

问题可能来自您解释test()提供的结果的方式。 如果正则表达式匹配字符串linkTitle ,则test返回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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM