我正在尝试创建正则表达式,检查字符串是否只在其间有任何特殊字符。所以我正在检查以下情况:
- “BX_ @ PO” - 无效
- “40-66-7” - 无效
- “_ BXTP” - 有效
- “ABC123?” - 有效
- “BXTP @” - 有效
- “PO @ GO_” - 无效
我正在尝试下面的代码,但它会在字符串中的任何位置检查特殊字符,而不仅仅是在它们之间。
const hasSpecialCharacters = (str) => {
return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
答案 0 :(得分:0)
试试这个正则表达式:
^[\s\S][a-zA-Z0-9]*[\s\S]$
<强>解释强>
^
- 断言字符串的开头[\s\S]
- 匹配任何字符[a-zA-Z0-9]*
- 匹配中间只有字母和数字的0+次出现。因此,不允许中间的特殊字符[\s\S]
- 匹配任何字符$
- 断言字符串的结尾答案 1 :(得分:0)
就像T.J's answer一样,但是可读的方式是:
const hasSpecialCharacters = (str) => {
return !/[a-zA-Z0-9][^a-zA-Z0-9]+[a-zA-Z0-9]/g.test(str)
}