如何将match()用于白名单字符?

时间:2012-04-13 20:32:43

标签: javascript

我使用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');
           }
});

4 个答案:

答案 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)) {


}