【发布时间】:2019-11-13 14:09:36
【问题描述】:
我在为我的要求编写正则表达式模式时感到非常困惑。 我希望文本字段不应该接受除下划线和连字符以外的任何特殊字符。此外,如果在文本字段中单独输入,则不应接受下划线、连字符和空格。
我尝试了以下模式->
/[ !@#$%^&*()+\=\[\]{};':"\\|,.<>\/?]/;
但这也允许下划线和连字符,以及单独输入的空格。
【问题讨论】:
标签: javascript regex
我在为我的要求编写正则表达式模式时感到非常困惑。 我希望文本字段不应该接受除下划线和连字符以外的任何特殊字符。此外,如果在文本字段中单独输入,则不应接受下划线、连字符和空格。
我尝试了以下模式->
/[ !@#$%^&*()+\=\[\]{};':"\\|,.<>\/?]/;
但这也允许下划线和连字符,以及单独输入的空格。
【问题讨论】:
标签: javascript regex
与其匹配你不想要的,不如匹配你真正想要的。
由于你从未指定字符串中是否可以包含字母、数字和空格,我只是假设它是一个word,所以我只匹配大小写字母,下划线和连字符。
^(([A-Za-z])+([\-|_ ])?)+$
如果您想尝试更多案例,我已经创建了regex101。
【讨论】:
如果您希望您的字符串不包含除下划线和连字符以外的特殊字符。但是有一个例外,如果它们包含带有连字符和下划线的空格,那么您可以单独处理该异常。这将使您的代码更易于理解,并易于适应进一步的异常。
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);
【讨论】: