2015-12-01 1 views
0

Я делаю функцию для проверки входных данных формы (для практики), и, возможно, я также ее использую.Проверка правильности регулярных выражений Javascript с использованием атрибутов поля ввода без eval

Мне было интересно, есть ли способ применить ту же функциональность без eval, поскольку я слышал, что это плохо для интерпретатора js. Также улучшения, если они есть. А также мне хотелось бы знать, есть ли что-то, что делает ту же работу, т. Е. Применять правила регулярного выражения для повторного использования для ввода полей.

Вот моя функция проверки JavaScript.

function validate(){ 
var num=/[0-9]+/g; 
var alphanum=/[0-9a-zA-Z_]+/g; 
var alphanumSpace=/[0-9a-zA-Z\w_]+/g; 
var alpha=/[a-zA-Z]+/g; 
var alphaSpace=/[a-zA-Z\w]+/g; 
var alphanumDot=/[0-9a-zA-Z\._]+/g; 
var money=/[0-9]+\.?[0-9]{0,2}?/g; 


var flag=true; 
var alertBox="Incorrect entries:\n\n"; 

$.each($('input[data-check]'),function(index,value){ 
    if(!eval(value.dataset.check+'.test("'+value.value+'")')){ 
    alertBox+=value.name+",\n"; 
    flag=false; 
    } 
}); 

alert(alertBox); 
return flag; 

} 

Который используется для вызова на форме

<form onsubmit="return validate()"> 

На полях, которые имеют атрибут данных проверки, как любой из переменных соответствия, которые я определил, как

<input data-check='num'> 

Это вызовет проверку регулярного выражения на числовое выражение, определенное в моем коде.

+0

Кроме того, ваш 'alphanumSpace' может быть упрощена только' [\ ш \ s] + '', который соответствует [а-z0-9 \ s _] + ',' \ w' означает любой символ слова - этот набор включает в себя 'alphanum' и' _' уже :) – SidOfc

ответ

1

Вы можете сделать что-то подобное, используя new RegExp и window[]:

$.each($('input[data-check]'),function(index,value){ 
    var str = value.value; 
    var patt = new RegExp(window[value.dataset.check]); 
    var res = patt.test(str); 
    if(!res){ 
    alertBox+=value.name+",\n"; 
    flag=false; 
    } 
});