在为我的需求编写正则表达式模式时,我感到非常困惑。 我希望文本字段除下划线和连字符外不应接受任何特殊字符。另外,如果在文本字段中单独输入,则不应接受下划线,连字符和空格。
我尝试按照模式->
/[ !@#$%^&*()+\=\[\]{};':"\\|,.<>\/?]/;
但这还允许使用下划线和连字符,如果单独输入也可以使用空格。
答案 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);