Javascript:使用正则表达式检查字符串是否只有来自另一个字符串的值?

Javascript:使用正则表达式检查字符串是否只有来自另一个字符串的值?,javascript,regex,string,pattern-matching,match,Javascript,Regex,String,Pattern Matching,Match,我有一个字符字符串,其中包含允许的字符。我想检查另一个字符串(input),如果它只有字符中的值 我不知道这是否可能,但正在寻找一种解决方案,它使用regex和match()来确定输入是否只允许使用字符 您可以使用构造函数从字符串创建regexp: function validStringUnsanitized(allowed, str) { var re = new RegExp("^[" + allowed + "]+$"); return re.test(str); }

我有一个
字符
字符串,其中包含允许的字符。我想检查另一个字符串(
input
),如果它只有
字符中的值

我不知道这是否可能,但正在寻找一种解决方案,它使用
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

您可以使用构造函数从字符串创建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

试试看。当测试字符串仅包含允许的字符时,Success将为true。这是区分大小写的

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\\[";
这是因为第一个反斜杠用于字符串转义,第二个反斜杠用于使其成为正则表达式中的转义。

试试看。当测试字符串仅包含允许的字符时,Success将为true。这是区分大小写的

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 valid_chars=['a','e','i','o','u','y'],
ret;
//或有效字符=string.split(“”);
ret=有效('测试',有效字符)//假的
ret=有效('aeyaa',有效字符)//真的
ret=有效('aeyaab',有效字符)//假的
函数有效(输入,检查)
{
如果(输入类型==='string')
输入=输入。拆分(“”);
如果(检查类型=='string')
检查=输入。拆分(“”);
if(输入类型!=='object')
{
log('isValid()失败:输入不是数组');
返回;
}
如果(检查类型!==“对象”)
{
log('isValid()失败:检查非数组');
返回;
}
对于(变量x=0;x如果你希望避免使用正则表达式,你可以考虑如下:

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 valid_chars=['a','e','i','o','u','y'],
ret;
//或有效字符=string.split(“”);
ret=有效('测试',有效字符)//假的
ret=有效('aeyaa',有效字符)//真的
ret=有效('aeyaab',有效字符)//假的
函数有效(输入,检查)
{
如果(输入类型==='string')
输入=输入。拆分(“”);
如果(检查类型=='string')
检查=输入。拆分(“”);
if(输入类型!=='object')
{
log('isValid()失败:输入不是数组');
返回;
}
如果(检查类型!==“对象”)
{
log('isValid()失败:检查非数组');
返回;
}
对于(变量x=0;x
您需要注意此处的特殊字符(例如,
allowed=“ab-x”
),我不知道,但它似乎对我不起作用。允许的字符为
abcdefghijklmnopqrstuvwxyz
,但是如果
testString
abc@
,则返回true:(有什么问题吗?还有一个问题,我是否需要在所有特殊字符之前使用双黑斜杠?例如:
abc\\!\\?\\\\\\\\\(\\)
?您需要注意此处的特殊字符(例如
allowed=“ab-x”
)我不知道,但它似乎对我不起作用。允许的字符是
abcdefghijklmnopqrstuvwxyz
,但是如果
testString
abc@
(有什么问题吗?还有一个问题,我需要在所有特殊字符之前使用双黑斜杠吗?例如:
abc\!\?\\\\\\\\\\\\\\\(\)