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

.match() с регулярным выражением возвращает null

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

var value = 'FailureStr1ng';
var type = 'ALPHA';
var regex = null;

switch(type) {
    case 'ALPHA':
        regex = '^[a-zA-Z]+$';
        break;
    case 'NUMERIC':
        regex = '^[0-9]+$';
        break;
    case 'ALPHANUMERIC':
        regex = '^[a-zA-Z0-9]+$';
        break;
}

return value.match(regex);

По какой-то причине при использовании совпадения всегда возвращается null. Есть ли способ исправить это или лучший способ сделать это?

Примечание. Код здесь представляет собой фрагмент гораздо большего кода, а переменная value и type обычно определяется другим методом.

4b9b3361

Ответ 1

Вы хотите RegExp.test, который проверяет значение для совпадения вместо получения соответствия. С вашим существующим кодом это будет означать:

if(!new RegExp(regex).test(value)){
    alert('Your string was invalid.');
}

Однако было бы предпочтительнее использовать литералы RegExp вместо строк, поскольку они намного эффективнее и понятнее и менее подвержены ошибкам:

var value = 'FailureStr1ng';
var type = 'ALPHA';
var regex = null;

switch(type) {
    case 'ALPHA':
        regex = /^[a-zA-Z]+$/;
        break;
    case 'NUMERIC':
        regex = /^[0-9]+$/;
        break;
    case 'ALPHANUMERIC':
        regex = /^[a-zA-Z0-9]+$/;
        break;
}

if(!regex.test(value)) {
    alert('Your string was invalid.');
}

Еще лучше, используйте словарь:

var expressions = {
    ALPHA: /^[a-zA-Z]+$/,
    NUMERIC: /^[0-9]+$/,
    ALPHANUMERIC: /^[a-zA-Z0-9]+$/
};

if(!expressions[type].test(value)) {
    alert('Your string was invalid.');
}

Ответ 2

Regex должен быть окружен /, а не ', поэтому JavaScript создает переменную типа regex, а не типа string. Так, например, для вашего дела ALPHA вы должны иметь

regex = /^[a-zA-Z]+$/;

Для получения дополнительной информации об использовании .match см. страницу MDN на .match.

Ответ 3

Ваш код выглядит как внутри function { ... }. Вы return что-нибудь? Если нет, то почему вы получаете null назад...

Кроме того, регулярные выражения окружены слэшами (/.../), а не кавычками.