Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: js - как названию функции присвоить значение переменной
 
 автор: Дмитрий Смаль   (02.02.2010 в 12:30)   письмо автору
 
 

Здравствуйте!
пишу функцию проверки полей формы на js
function valid (i,v) {
    var email     = /^[-A-Za-z0-9_.,]+@[-A-Za-z0-9_.,]+$/;
    var login     = /^[-A-Za-z0-9_.,]+$/;
    var password  = /^[-A-Za-z0-9_.,#№@]+$/;
    var text      = /^-ЁёЇїІіА-Яа-яA-Za-z0-9_ ()#№@.]+$/;

    if (email.test(i)) alert ('да');
    else alert('нет');
}


у меня получилось 4 типа текста (email,login,passwor,text) и для каждого своё регулярное выражение
в функию valid передается два параметра - значение поля (i) и тип текста (v)
логично тип текста называть именем переменной и потом вызывать функцию v.test - но это неработает

вопрос, как тут поступить, чтобы не писать условия if else для каждого типа текста
хочется запускать одну функцию название которой будет строится из значения перемнной v

  Ответить  
 
 автор: sl1p   (02.02.2010 в 13:54)   письмо автору
 
   для: Дмитрий Смаль   (02.02.2010 в 12:30)
 

function valid (i,v) {
    var pats = {
        email : /^[-A-Za-z0-9_.,]+@[-A-Za-z0-9_.,]+$/,
        login : /^[-A-Za-z0-9_.,]+$/,
        password : /^[-A-Za-z0-9_.,#№@]+$/,
        text : /^-ЁёЇїІіА-Яа-яA-Za-z0-9_ ()#№@.]+$/
    }
    if (pats[v].test(i)) alert ('да'); 
    else alert('нет'); 
}

  Ответить  
 
 автор: Trianon   (02.02.2010 в 14:25)   письмо автору
 
   для: Дмитрий Смаль   (02.02.2010 в 12:30)
 

За попытку ограничить сверху длину и/или набор символов пароля нужно пороть на конюшне.
Пока человек не поймет, что пароль ему, как владельцу портала, не принадлежит.

  Ответить  
 
 автор: АЯ   (02.02.2010 в 15:59)   письмо автору
 
   для: Дмитрий Смаль   (02.02.2010 в 12:30)
 

Прочтите Remarks на http://msdn.microsoft.com/en-us/library/h6e2eb7w%28VS.85%29.aspx
Это я к тому, что надо бы заменить используемый вами синтаксис /pattern/[flags] на new RegExp("pattern"[,"flags"])

  Ответить  
 
 автор: sl1p   (02.02.2010 в 16:03)   письмо автору
 
   для: АЯ   (02.02.2010 в 15:59)
 

там ничего толкового чтобы могло помочь автору нет :)

или объясните чем бы оно здесь было "в тему":)

  Ответить  
 
 автор: АЯ   (02.02.2010 в 16:19)   письмо автору
 
   для: sl1p   (02.02.2010 в 16:03)
 

Плохо читаете по-русски и ещё хуже - по-английски?
Бывает.

Итак, разъясняю написанное буржуинами по-английски:
Топикстартер использует один синтаксис при создании объектов RegExp.
Разработчики браузера при обработке данных, вводимых пользователем, рекомендуют использовать другой синтаксис.

А теперь разъясняю написанное мною по-русски:
Вне зависимости от способа решения конкретной проблемы топикстартера, ему следует обратить внимание на рекомендацию разработчиков.

  Ответить  
 
 автор: sl1p   (02.02.2010 в 16:31)   письмо автору
 
   для: АЯ   (02.02.2010 в 16:19)
 

ода, там написано что это следует использовать для динамических выражений. И нихрена о том что это лучше :)

  Ответить  
 
 автор: АЯ   (02.02.2010 в 20:35)   письмо автору
 
   для: sl1p   (02.02.2010 в 16:31)
 

Цитирую:
Use Syntax 1 when you know the search string ahead of time.
Use Syntax 2 when the search string is changing frequently,
or is unknown, such as strings taken from user input.

  Ответить  
 
 автор: Trianon   (03.02.2010 в 04:13)   письмо автору
 
   для: АЯ   (02.02.2010 в 20:35)
 

search string (строка поиска) в данном контексте это паттерн (искомый образец) , а не анализируемая regexp'ом строка данных.
И в источнике объясняется причина рекомендации.
Компиляция паттерна в Syntax2 выполняется динамически, при формировании объекта regexp.
Компиляция паттерна в Syntax1 выполняется статически - в момент загрузки скрипта, когда значения вовлеченных переменных [могут быть еще не определены]... собственно, кода их и применить то никак, согласно семантике.

  Ответить  
 
 автор: АЯ   (03.02.2010 в 13:23)   письмо автору
 
   для: Trianon   (03.02.2010 в 04:13)
 

>"search string (строка поиска) в данном контексте это паттерн (искомый образец) , а не анализируемая regexp'ом строка данных."

Ага... "если на клетке слона прочтёшь надпись «буйвол», не верь глазам своим" (с)

"Я офигеваю, дорогая редакция" (с)

  Ответить  
 
 автор: Trianon   (03.02.2010 в 16:33)   письмо автору
 
   для: АЯ   (03.02.2010 в 13:23)
 

Понятно, что язык не самый строгий. Но адекватный перевод именно таков.
Если Вы заранее знаете, что ищете, применяйте синтаксис var re = /искомое/флаги;
Если искомое заранее неизвестно (и/или часто меняется, является входным параметром),
применяйте синтаксис var re = new RegExp(выражение_образца, выражение_с_флагами);
Первое быстрее работает, второе больше может.
По-моему, всё на поверхности.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования