Javascript regex.test() "Uncaught TypeError: undefined не является функцией"

Просто пытаюсь использовать возможности regex javascript с помощью функции .test().

  var nameRegex = '/^[a-zA-Z0-9_]{6,20}$/';

  if(nameRegex.test($('#username').val())) {
      ...
  }

Ошибка в этой строке if(nameRegex.test($('#username').val())) {

Отладчик разрывается там и говорит "Некопать TypeError: undefined не является функцией" . Кажется, что .test() не определен? Не должно быть?

Ответ 1

Как он в настоящее время стоит, nameRegex не является регулярным выражением, но строка и String не имеют test functon, поэтому вы получаете эту ошибку.

Удалите кавычки вокруг вашего регулярного выражения. Это буквальная форма регулярного выражения.

var nameRegex = /^[a-zA-Z0-9_]{6,20}$/; //remove the quotes

Ответ 2

Кроме того, вы можете создать RegExp из строки встроенным конструктором в javascript.

var nameRegex = '^[a-zA-Z0-9_]{6,20}$';
var regex = new RegExp(nameRegex);
...

if(regex.test(stringToTest)) {
    ...
}

...

MDN Docs:: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

ПРИМЕЧАНИЕ. Не создавайте исходные "/" косые черты в строке при создании объекта регулярного выражения... Он добавит их.