验证使用javascript只有一个特殊字符的字符串

时间:2015-03-24 12:21:39

标签: javascript regex

我知道在Stack-overflow上有几个这样的问题,但我似乎无法从已经发布的问题中得到一个直接的答案。如果有人可以帮助我,请向前看。

我想验证字符串&如果满足以下条件,则返回TRUE

  • 字符串只包含一个特殊字符,即_(下划线)
  • &安培;此特殊字符不应出现在字符串的开头或结尾

示例:

     var demo1="23dsfXXXa32_XXXX"  // Valid, should returns TRUE
     var demo2="_23dsfXXXa32_XXXX" // Invalid,should returns FALSE
     var demo3= "23dsfXXXa32XXXX_" //invalid,should returns FALSE
     var demo4= "_" //invalid,should returns FALSE
     var demo5= "&sdfsa_XX";// returns false

尝试:FIDDLE

if(/^[a-zA-Z0-9_ ]*$/.test(demo1) == true) {
   alert('Valid String');
}

结果:无法按预期运行

2 个答案:

答案 0 :(得分:0)

既然你已经说过要求字符在那里,一种方法是使用正则表达式,每一端都有一个否定的字符类,其中一个是非否定的中间:

var rex = /^[^_]+[_][^_]+$/;

只处理下划线;在那里为所有三个字符类添加其他“特殊”字符。

如何运作:

  • ^匹配字符串
  • 的开头
  • [^_]+在课程
  • 中需要一个或多个的字符
  • [_]只需要 类中的一个字符
  • [^_]+在课程
  • 中需要一个或多个的字符
  • $匹配字符串结尾

答案 1 :(得分:-1)

您可以使用indexOf来验证它不在第一个或最后一个位置并split来查看它是否仅存在一次,从而简化它。这通常比正则表达式更快。<​​/ p>

function checkString(str){
    return str.indexOf("_") !== 0 && str.indexOf("_") !== str.length-1 && str.split("_") === 2;
}