0

私はこのような機能を持っています:

var name_regex = /^[a-zA-Z0-9_ -]{3,32}$/,
body_regex = /^[a-zA-Z0-9_ -]$/,
email_regex = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/,
phone_regex = /^[0-9-]{3,32}$/,
error_count;

function validation_test (name, value) {
    var test_name = name + '_regex';
    console.log(test_name);
    error_count = 0;
    if(!test_name.test(value)){
        error_count += 1;
    }
}

そして、(送信時に)実行しようとすると、次のエラーが発生します。

test_name.test は関数ではありません

console.log(test_name) は、変数の適切な名前 (name_regex など) を教えてくれます。この変数を機能させるにはどうすればよいですか?

4

4 に答える 4

5

オブジェクトを使用するだけです:

var regexes = {
    name: /^[a-zA-Z0-9_ -]{3,32}$/,
    body: /^[a-zA-Z0-9_ -]$/,
    email: /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/,
    phone: /^[0-9-]{3,32}$/
};



function isValid(name, value) {
    return regexes[name].test(value);
}

あなたの他のコードで:

   if( !isValid( "phone", 123 ) ) {
       alert("Invalid phone");
   }
于 2012-11-19T22:05:17.460 に答える
1

変数 test_name は適切な regExp オブジェクトである必要がありますhttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test

検討

...
function validation_test (name, value) {
    var test_name = name + '_regex';
    console.log(typeof(test_name)); // string
...

コンソールログの上の行の連結が原因で発生するよりも

于 2012-11-19T22:05:30.357 に答える
1

たとえば、関数を呼び出そうとしていますか

validation_test('phone', '9184079201');

もしそうなら、正規表現をオブジェクトに入れることをお勧めします:

var regex = {
    'name':  '...',
    'body':  '...',
    'email': '...',
    'phone': '...',
};

function validation_test(name, value) {
    if(!regex[name].test(value)) {
        //...
    }
}

そうすれば、文字列で検索できます。

于 2012-11-19T22:07:27.283 に答える
0

test_nameは文字列であり、それが表す正規表現ではないため、希望どおりに!test_name.test(value)はなりません。

関数の他の場所を使用していないのでname、正規表現を引数として渡してみませんか?

function validation_test (test_name, value) {
    error_count = 0;
    if(!test_name.test(value)){
        error_count += 1;
    }
}
于 2012-11-19T22:05:37.147 に答える