验证控件-还有哪些输入值不会被验证

作者:vkvi 来源:ITPOW(原创) 日期:2007-11-19

前面提到零长度字符串的输入值不会被验证,而当作验证通过处理,那么除了零长度字符串,还有哪些输入值不会被验证呢?

查看服务器生成的 JS 代码,可以发现在验证之前都要进行如下处理:

function ValidatorTrim(s) {
    var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    return (m == null) ? "" : m[1];
}

这段代码在互联网上的解释就是除去字符串两端的空格,这种说法大致是正确的,但更准确的说法是:除去字符串两端的换页符、换行符、回车符、制表符(Tab 制表符)、垂直制表符、英文空格。

再查看验证过程,可以发现:

    if (ValidatorTrim(value).length == 0)
        return true;

也就是说按 ValidatorTrim 处理后,如果字符串为零长度,就会直接返回验证通过。但是,这里长度判断通过后,进一步验证(比如正则表达式验证)使用的字符串是输入的原样字符串,不是“掐头去尾”的。


说到这里顺便解释一下上面的正则表达式。

match 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。

正则表达式 /^\s*(\S+(\s+\S+)*)\s*$/ 中:

  • / 是 JS 中正则表达式限定符。
  • ^ 是字符串开始。
  • $ 是字符串结尾。
  • \s 是空格符、制表符、换行符等。
  • \S 是非空格符、制表符、换行符等。
  • * 是匹配前一个字符零次及以上。
  • + 是匹配前一个字符一次及以上。
  • () 是一个子表达式。

由于没有指定全局查找 g,并且 () 的优先级很高(仅位于转义符之后),所以返回的数组的第一元素是整个字符串,第二个元素是匹配 (\S+(\s+\S+)*) 的部分,也就是上面说的效果。

相关文章