【问题标题】:Regex pattern for my below mentioned requirement我下面提到的要求的正则表达式模式
【发布时间】:2019-11-13 14:09:36
【问题描述】:

我在为我的要求编写正则表达式模式时感到非常困惑。 我希望文本字段不应该接受除下划线和连字符以外的任何特殊字符。此外,如果在文本字段中单独输入,则不应接受下划线、连字符和空格。

我尝试了以下模式->

/[ !@#$%^&*()+\=\[\]{};':"\\|,.<>\/?]/;

但这也允许下划线和连字符,以及单独输入的空格。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    与其匹配你不想要的,不如匹配你真正想要的。

    由于你从未指定字符串中是否可以包含字母、数字和空格,我只是假设它是一个word,所以我只匹配大小写字母,下划线和连字符。

    ^(([A-Za-z])+([\-|_ ])?)+$
    

    如果您想尝试更多案例,我已经创建了regex101

    【讨论】:

    • 上述正则表达式符合我的要求,除了一种情况。让我提一下,可以在文本字段中输入任意数量的单词。除了下划线和连字符外,它不应接受黑白单词或开头/结尾中的任何特殊字符。此处的例外是,如果在文本字段中单独输入,则不应接受下划线、连字符和空格。
    • 它应该接受空格、下划线和连字符,如果以黑白形式给出的话。
    【解决方案2】:

    如果您希望您的字符串不包含除下划线和连字符以外的特殊字符。但是有一个例外,如果它们包含带有连字符和下划线的空格,那么您可以单独处理该异常。这将使您的代码更易于理解,并易于适应进一步的异常。

    function validateString(str){
    
      let reg = /[^!@#$%^&*()+\=\[\]{};':"\\|,.<>\/?]/g;
      let match = str.match(reg);
      console.log(match);
     if(match && (match.includes(" ") || match.includes("_") || match.includes("-")) && (!match.join(",").match(/[a-zA-Z]/))){
        // regex contains invalid characters 
        console.log(str + ": Invalid input");
      }
      else if(match){
        console.log(str + ": Valid string");
      }
    
    }
    
    let str = "-_  ";
    
    let str1 = "Mathus-Mark";
    let str2 = "Mathus Mark";
    let str3 = "Mathus_Mark";
    let str4 = " ";
    let str5 = "-";
    let str6 = "_";
    
    
    validateString(str);
    validateString(str1);
    validateString(str2);
    validateString(str3);
    validateString(str4);
    validateString(str5);
    validateString(str6);

    【讨论】:

    • 感谢您的宝贵时间。如果在文本字段中,我们将单独输入下划线/连字符/空格,则该解决方案不起作用...它允许它们,但不应该。假设我们有 str = "_", str1 = "-", str2 = " ",在这种情况下它也应该抛出错误。这三件事只有在用字符串输入时才允许,而不是单独输入。
    • 我误会了,我以为三个一起是不允许的。我已经更新了我的答案。
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多