我下面提到的要求的正则表达式模式

时间:2019-11-13 14:09:36

标签: javascript regex

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

我尝试按照模式->

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

但这还允许使用下划线和连字符,如果单独输入也可以使用空格。

2 个答案:

答案 0 :(得分:1)

应该匹配您实际想要的内容,而不是匹配您不想要的内容。

因为您从未指定字符串中是否可以包含字母,数字和空格,所以我只是假设它是一个单词,所以我只将大写和小写字母与下划线和连字符匹配。

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

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

答案 1 :(得分:0)

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

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);