Jump to content
  • 0

Переменная в регулярном выражении


WiciN
 Share

Question

С регулярными выражениями я практически не знаком, поэтому прошу помощи.

Задача такая, нужно проверить содержимое поля ввода кошелька WM.

Как известно они состоят из буквы и 12 цифр после неё (пример Z123456789123, R123456789123…)

Придумал такое выражение для проверки: (/^([u,Z,E,R]+([0-9]{12}))$/i).test(getElementById('purse_wm').value); все работает, но тип кошелька тоже меняется динамически, поэтому нужно в выражение вместо [u,Z,E,R] вставить переменную 'wm_type' которая содержит одну букву…

Идею с массивом из 4 выражений и индексом wm_type не предлагать…

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0
С регулярными выражениями я практически не знаком, поэтому прошу помощи.

Задача такая, нужно проверить содержимое поля ввода кошелька WM.

Как известно они состоят из буквы и 12 цифр после неё (пример Z123456789123, R123456789123…)

Придумал такое выражение для проверки: (/^([u,Z,E,R]+([0-9]{12}))$/i).test(getElementById('purse_wm').value); все работает, но тип кошелька тоже меняется динамически, поэтому нужно в выражение вместо [u,Z,E,R] вставить переменную 'wm_type' которая содержит одну букву…

Идею с массивом из 4 выражений и индексом wm_type не предлагать…

[u|Z|E|R] не катит?

А вообще есть такая замечательная вещь как new RegExp.

Link to comment
Share on other sites

  • 0
[u|Z|E|R] не катит?

Не вижу разницы между [u|Z|E|R] и [u,Z,E,R]

А вообще есть такая замечательная вещь как new RegExp.

Я и так проверяю с помощью RegExp.


// Моя запись
(/^([U,Z,E,R]+([0-9]{12}))$/i).test(getElementById('purse_wm').value);
// ничем не отличается от
mask_keeper = new RegExp("/^([U,Z,E,R]+([0-9]{12}))$/i")
mask_keeper.test(getElementById('purse_wm').value);

Я хреново разбираюсь в синтаксисе javascript поэтому и спрашиваю, для тех кто знает вопрос элементарный.

Например средствами php я бы сделал так:

echo '(/^(['.$wm_type.']+([0-9]{12}))$/i).test(getElementById(\'purse_wm\').value);';

где $wm_type может принимать значения Z,U,E или R, но переменная $wm_type меняется на стороне клиента.

В моём случае wm_type получает значение от радио кнопки, то есть на стороне клиента. Если в поле заполнен кошелёк R111111111111 и юзер переключил радиобокс на U, то выражение должно, ранее заполненное поле R111111111111, считать неправильным.

Не знаю уже как можно подробней описать. Суть проблемы вместо [u,Z,E,R] подставить значение переменной javascript с именем wm_type, которая может принимать значение U,Z,E или R.

Edited by WiciN
Link to comment
Share on other sites

  • 0
Я не зря приводил new RegExp :)

mask_keeper = new RegExp("/^([" + wm_type + "]+([0-9]{12}))$/i")

Оказываеццо все так просто, то есть теоретически ("/^([" + wm_type + "]+([0-9]{12}))$/i").test… тоже должно работать...

У меня там слишком огромный файл с функциями, хотелось бы покороче, хоть на строчку.

И кстати вопрос, получается при каждом запуске проверки будет создаваться new RegExp(), он будет перезаписывать текущее значение mask_keeper или старое будет висеть в оперативе?

Edited by WiciN
Link to comment
Share on other sites

  • 0
Оказываеццо все так просто, то есть теоретически ("/^([" + wm_type + "]+([0-9]{12}))$/i").test… тоже должно работать...

У меня там слишком огромный файл с функциями, хотелось бы покороче, хоть на строчку.

"/^([" + wm_type + "]+([0-9]{12}))$/i" - это строка

/.../i - это регексп.

Выводы сделай сам.

И кстати вопрос, получается при каждом запуске проверки будет создаваться new RegExp(), он будет перезаписывать текущее значение mask_keeper или старое будет висеть в оперативе?

Если это сделано в функции, то все переменные очищаются из памяти после завершения ее исполнения.

Link to comment
Share on other sites

  • 0

Спасибо за помощь, отличная штука оказывается регулярные выражения!

Я всегда их избегал из-за того, что не понимаю, а теперь чувствую нужно вникать, очень уж полезная вещь…

Link to comment
Share on other sites

  • 0
Спасибо за помощь, отличная штука оказывается регулярные выражения!

Я всегда их избегал из-за того, что не понимаю, а теперь чувствую нужно вникать, очень уж полезная вещь…

Только очень медленная. В некоторых случаях куда правильнее использовать indexOf или split.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy