在Javascript中使用特殊字符的正则表达式

时间:2017-10-19 11:42:54

标签: javascript regex

我正在尝试创建正则表达式,检查字符串是否只在其间有任何特殊字符。所以我正在检查以下情况:

  
      
  • “BX_ @ PO” - 无效
  •   
  • “40-66-7” - 无效
  •   
  • “_ BXTP” - 有效
  •   
  • “ABC123?” - 有效
  •   
  • “BXTP @” - 有效
  •   
  • “PO @ GO_” - 无效
  •   

我正在尝试下面的代码,但它会在字符串中的任何位置检查特殊字符,而不仅仅是在它们之间。

const hasSpecialCharacters = (str) => {
    return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}

2 个答案:

答案 0 :(得分:0)

试试这个正则表达式:

^[\s\S][a-zA-Z0-9]*[\s\S]$

Click for Demo

<强>解释

  • ^ - 断言字符串的开头
  • [\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)
}