1

我正在尝试在 JavaScript 中验证表单,将所有正则表达式存储在一个对象中,但是当我调用任何正则表达式时,它都不起作用

;(function() {

         var Rules = {
            "nick"     : '/^[0-9a-zA-Z_]{5,20}$/'
          , "password" : '/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/'
          , "email"    : '/^[_a-z0-9.-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'
          , "name"     : '/^[a-zA-Z -]+$/'
          , "date"     : '/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/'
          , "country"  : '/^[a-zA-Z]+$/'
        };

        $('.validation-required').click(function(e){
          $(e.target).blur(function(){
            if( e.target.value( Rules [ e.target.name ] ) ) {
              console.log('true');
            }
            else {
              console.log('false');
            }
            $(e.target).unbind('blur');
          });
        });
      })();

所以,总是返回"false";我试过这样的事情:

if( e.target.value( new RegExp ( Rules [ e.target.name ] ) ) ) ...

或者

if( e.target.value( Rules [ e.target.name ].toString() ) ) ...

或者

if ( Rules [ e.target.name ].test( e.target.value ) ) ...

在这种情况下,控制台会抛出错误:

(...) has no methd test

我该如何解决?

4

2 回答 2

4

您拥有的条目Rules是字符串,而不是正则表达式文字,因为它们被引用了。改为这样做:

var Rules = {
    "nick": /^[0-9a-zA-Z_]{5,20}$/
    ...

另外,我不确定是否if (e.target.value(Rules[e.target.name]))完全正确......应该更像是什么if (Rules[e.target.name].test(e.target.value))

于 2013-03-04T23:34:11.783 回答
0

您的最后一个示例显示为if (...).test,这是一个语法错误。

于 2013-03-04T23:36:31.957 回答