我使用preg_match进行服务器端验证,但我也希望有一个客户端。
对于我的PHP,我允许这些字符:
'/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/'
如何在JavaScript中使用match()
制作白名单?
编辑:
我尝试了这个,但由于某种原因它没有用:
我的调试器在if语句之前说:
218SyntaxError: Invalid regular expression: range out of order in character class
$('#title').blur(function(){
input = $('#title').val();
var invalidChars = /^[^a-z][^a-z\d .:-,!?]+$/i;
if (!invalidChars.test(input)){
alert('true');
}
else {
alert('false');
}
});
答案 0 :(得分:3)
以上所有答案都是正确的,但只是旁注:不是写[A-Za-z]
,而是简单的/[a-z]/i
就足够了。 i
是一个不区分大小写的标志......
答案 1 :(得分:2)
尝试以下
var text = ...;
if (text.match(/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/)) {
...
}
答案 2 :(得分:2)
var validChars = /^[a-z][a-z\d .:\-,!?]+$/i;
if (validChars.test(myText)){ ... }
如果你想要的只是知道是否存在匹配,使用regex.test(str)
的效果会比str.match(regex)
稍高一些。
或者,如果您看到任何无效字符,您可以提前退出:
var invalidChars = /^[^a-z][^a-z\d .:\-,!?]+$/i;
if (!invalidChars.test(myStr)){
// we passed
}
这允许正则表达式测试在看到不允许的字符时停止。
答案 3 :(得分:2)
实际上恰恰相反:
var regexp = /^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/;
if (regexp.test(text)) {
}