【问题标题】:Check multiple regex on every string in array检查数组中每个字符串的多个正则表达式
【发布时间】:2023-01-23 19:20:52
【问题描述】:

我有一个角色数组,如下所示:

["ROLE_ADMIN", "ROLE_USER_ADMIN_MARKETING"]

我需要的:
我需要检查此数组中的 string 是否完全匹配。如果是,return true,如果不是return false

警告:
正如您在下面看到的,roles 以相同的文本开头,因此检查完全相同的字符串很重要。

为什么我的console.log在这里返回true?也许我不应该使用 switch 案例?

export const ROLE_ADMIN = "ROLE_ADMIN";
export const ROLE_USER_ADMIN = "ROLE_USER_ADMIN";
export const ROLE_MARKETING = "ROLE_USER_ADMIN_MARKETING";
export const ROLE_TECHNICAL = "ROLE_USER_ADMIN_TECHNICAL";

const roles: string[] = JSON.parse(localStorage.getItem("roles"));

class UserRole {
    static regexAdmin = new RegExp(`\\b${ROLE_ADMIN}\\b`);
    static regexUserAdmin = new RegExp(`\\b${ROLE_USER_ADMIN}\\b`);
    static regexMarketing = new RegExp(`\\b${ROLE_MARKETING}\\b`);
    static regexTechnical = new RegExp(`\\b${ROLE_TECHNICAL}\\b`);

    public static hasAuthorization(role: string): boolean {
        for (const role of roles) {
            switch (true) {
                case UserRole.regexAdmin.test(role):
                    return true;
                case UserRole.regexUserAdmin.test(role):
                    return true;
                case UserRole.regexMarketing.test(role):
                    return true;
                case UserRole.regexTechnical.test(role):
                    return true;
                default:
                    return false;
            }
        }
    }
}

export const hasAdmin = UserRole.hasAuthorization(ROLE_USER_ADMIN);

console.log(hasAdmin); // THIS RETURNS TRUE

【问题讨论】:

    标签: javascript arrays regex


    【解决方案1】:

    这是一个简单的

    ["ROLE_ADMIN", "ROLE_USER_ADMIN_MARKETING"].includes(ROLE_USER_ADMIN)
    

    例子:

    let ROLE_USER_ADMIN = "ROLE_ADMIN";
    
    console.log(["ROLE_ADMIN", "ROLE_USER_ADMIN_MARKETING"].includes(ROLE_USER_ADMIN));
    
    ROLE_USER_ADMIN = "ROLE_ADMIN2";
    
    console.log(["ROLE_ADMIN", "ROLE_USER_ADMIN_MARKETING"].includes(ROLE_USER_ADMIN));
    
    
    ROLE_USER_ADMIN = "ROLE_ADMI";
    
    console.log(["ROLE_ADMIN", "ROLE_USER_ADMIN_MARKETING"].includes(ROLE_USER_ADMIN));

    完整的代码可以是

    export const ROLE_ADMIN = "ROLE_ADMIN";
    export const ROLE_USER_ADMIN = "ROLE_USER_ADMIN";
    export const ROLE_MARKETING = "ROLE_USER_ADMIN_MARKETING";
    export const ROLE_TECHNICAL = "ROLE_USER_ADMIN_TECHNICAL";
    
    const roles: string[] = JSON.parse(localStorage.getItem("roles"));
    
    class UserRole {
        public static hasAuthorization(role: string): boolean {
            return roles.includes(role);
        }
    }
    
    export const hasAdmin = UserRole.hasAuthorization(ROLE_USER_ADMIN);
    
    console.log(hasAdmin); // THIS RETURNS TRUE
    

    【讨论】:

    • includes 不检查字符串是否完全匹配。
    • @Johan 当然可以。我添加了一个例子。
    • 控制台仍会使用您的代码返回 true。 ROLE_USER_ADMINROLE_USER_ADMIN_MARKETING不一样
    • @mplungjan roles 是一个数组。 roles.includesArray.prototype.includes
    • 行。如果你使用 Array.includes 它可以工作,如果你使用 String.includes 它就不会工作
    猜你喜欢
    • 2015-01-11
    • 2011-12-15
    • 1970-01-01
    • 2023-03-07
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多