.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 обычно определяется другим методом.
Ответы
Ответ 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
назад...
Кроме того, регулярные выражения окружены слэшами (/.../
), а не кавычками.