Подтвердить что ты не робот

JavaScript: тест vs exec

Я хотел бы знать, что лучший способ проверить строку, например (mail, password..Etc).

/^...$/i.exec(a)

против

/^...$/i.test(a)
  • exec возвращает значение
  • test true

тест

// 1° way
var mail = req.body.mail;
if(check(mail)){

Exec:

// 1° way
var mail = req.body.mail;
if(check(mail)){

// 2° way
var mail = check(req.body.mail);
if(mail){

exec или test? и какое число (1 ° или 2 °, если exec)

Решение

test лучше для этого случая.

  • он, безусловно, будет быстрее.

Но самое главное

  • test выполняет всю свою работу. Хотя exec не выполнялся, потому что больше можно сделать, но нам это не нужно.
  • Как сказал Маттиас Буэленс, используя isMail(), это более логично: это электронная почта: да или нет. Хотя exec: это электронная почта: email или null → wtf? лол
4b9b3361

Ответ 1

Если вам нужно только проверить строку ввода для соответствия регулярному выражению, RegExp.test наиболее подходит. Он даст вам возвращаемое значение boolean, которое делает его идеальным для условий.

RegExp.exec дает возвращаемое значение типа массива со всеми группами захвата и совпадающими индексами. Поэтому это полезно, когда вам нужно работать с захваченными группами или индексами после матча. (Кроме того, он ведет себя немного иначе по сравнению с String.match при использовании глобального модификатора /g)

В конечном счете, это не будет иметь большого значения в скорости или эффективности. Регулярное выражение будет по-прежнему оценено, и все соответствующие группы и индексы будут доступны через глобальный объект RegExp (хотя настоятельно рекомендуется использовать возвращаемые значения).

Что касается теста if, это просто вопрос личного вкуса. Присвоение результата теста регулярного выражения переменной со значимым именем (например, isEmail) может улучшить читаемость, но кроме этого они оба прекрасны.