我不是正则表达式的专家,但我尝试过验证一个字段,该字段允许使用空格但不包含任何其他特殊字符的字母数字数据。其中linkTitle是我在条件
中尝试使用以下正则表达式进行测试的变量的名称/[^A-Za-z\d\s]/.test(linkTitle)
/[^A-Za-z0-9\s]/.test(linkTitle)
/[^A-Za-z\d ]/.test(linkTitle)
并且这些都没有奏效......我很想知道正则表达式使用\ s出了什么问题,似乎是指空白以及适合该法案的正则正则表达式。
提前致谢!!
答案 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"));
});
显示true
,true
,true
,false
,false
或者如果你想允许空字符串,你可以使用相同的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()
提供的结果的方式。如果正则表达式匹配字符串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