我有一个characters
包含允许字符的字符串。我想检查另一个字符串 ( input
),如果它仅具有来自characters
.
如果可能,我不反对,而是寻找一种解决方案,该解决方案使用regex
并match()
确定输入是否仅包含允许的字符。
我有一个characters
包含允许字符的字符串。我想检查另一个字符串 ( input
),如果它仅具有来自characters
.
如果可能,我不反对,而是寻找一种解决方案,该解决方案使用regex
并match()
确定输入是否仅包含允许的字符。
您可以使用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
试一试。当测试字符串仅包含允许的字符时,成功将为真。这是区分大小写的。
var allowedCharacters = "abcdefghijklmnopqrstuvwxyz";
var regex = new RegExp("^[" + allowedCharacters + "]*$");
var testString = "abc#@#";
var success = regex.test(testString);
对于不区分大小写的情况,将相应的行替换为以下内容。这添加了一个正则表达式修饰符。
var regex = new RegExp("^[" + allowedCharacters + "]*$", "i");
如果您的 allowedCharacters 变量中有特殊字符,则必须使用双斜杠对其进行转义。因此,要允许方括号字符也必须使用。
var allowedCharacters = "abc\\[";
这是因为第一个反斜杠用于字符串转义,第二个反斜杠用于正则表达式中的转义。
如果您希望避免使用正则表达式,您可以考虑以下内容:
var valid_chars = ['a', 'e', 'i', 'o', 'u', 'y'],
ret;
//or valid_chars = string.split('');
ret = isValid('test', valid_chars); //false
ret = isValid('aeyaa', valid_chars); //true
ret = isValid('aeyaab', valid_chars); //false
function isValid(input, check)
{
if (typeof input === 'string')
input = input.split('');
if (typeof check === 'string')
check = input.split('');
if (typeof input !== 'object')
{
console.log('isValid() failed: input not array');
return;
}
if (typeof check !== 'object')
{
console.log('isValid() failed: check not array');
return;
}
for (var x = 0; x < input.length; ++x)
{
var char_isvalid = false;
for (var y = 0; y < check.length; ++y)
{
if (input[x].toLowerCase() === check[y].toLowerCase())
{
char_isvalid = true;
break;
}
}
if (! char_isvalid)
{
return false;
}
}
return true;
}
你可以用这个功能做到这一点
var allowed = 'abcdef';
function CheckAllowedWithRegex(str,allowed){
var pattern = new RegExp("[^"+allowed+"]");
return str.match(pattern) == null;
}
var str1 = 'aaabcc';
var str2 = 'aavbllkwqxx';
alert( CheckAllowedWithRegex(str1,allowed ) ); // output is true
alert( CheckAllowedWithRegex(str2,allowed ) ); // output is false