Вы можете использовать RegExp конструктор для создания регулярного выражения из строки:
function validStringUnsanitized(allowed, str) {
var re = new RegExp("^[" + allowed + "]+$");
return re.test(str);
}
> validStringUnsanitized('abx', 'abx');
true
> validStringUnsanitized('abx', 'ght');
true
Но если вы хотите, чтобы специальные символы, вам необходимо дезинфицировать разрешенную один. В противном случае вы получите нежелательные результаты:
// the regex becomes [ab-x] which is from a to x
> validStringUnsanitized('ab-x', 'ghai');
true
> validStringUnsanitized(']ab', 'ab');
false
Таким образом, вы должны избежать некоторых символов, как это:
function validString(allowed, str) {
var sanitized = allowed.replace(/([\]\-\\])/g, '\\$1')
var re = new RegExp("^[" + sanitized + "]+$");
return re.test(str);
}
> validString(']ab-x\\[', 'abxaabbx');
true
> validString(']ab-x\\[', 'ab-\\xb[]ab');
true
> validString(']ab-x\\[', 'ghai');
false
JSFiddle
вам нужно обратить внимание на специальные символы здесь (например, 'allowed =" ab-x "') – georg
Правильно Я обновлю, чтобы это объяснить. – Ally
Я не знаю, но это, похоже, не работает на меня. Разрешенные символы: 'abcdefghijklmnopqrstuvwxyz', однако он возвращает true, если' testString' 'abC# @ #'. :(Что случилось? – gen