簡體   English   中英

Javascript:使用正則表達式檢查字符串是否僅包含另一個字符串的值?

[英]Javascript: Use regex to check if a string has values only from another one?

我有一個characters的字符串,包含允許字符。 我想檢查另一個字符串( input ),如果它僅具有來自characters值。

我不是沒有可能,但是正在尋找一種使用regexmatch()來確定輸入是否僅允許字符的解決方案。

您可以使用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

JS小提琴

快去 當測試字符串僅包含允許的字符時,成功為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;
}

您可以使用此功能

http://jsfiddle.net/SXeTJ/

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM