如何检查正则表达式没有重复的字母?

时间:2016-02-17 22:26:38

标签: javascript regex

我需要检查一个单词是Isogram,Isogram的含义,是一个单词没有重复的字母。

我需要实现一个函数来确定只包含字母的字符串是否是等值线图。假设空字符串是等值线图。忽略字母案例。

这是一个测试用例

isIsogram( "Dermatoglyphics" ) == true
isIsogram( "aba" ) == false
isIsogram( "moOse" ) == false // -- ignore letter case

我正在考虑用正则表达式做这件事。

function isIsogram(str){
  //...
}
你可以帮忙吗?

4 个答案:

答案 0 :(得分:8)

就像那个一样简单

function isIsogram (str) {

    return !/(\w).*\1/i.test(str);
}

答案 1 :(得分:3)

这样做:

HashSet

答案 2 :(得分:2)

您可以通过将输入转换为小写来使用它:

var re = /^(?:([a-z])(?!.*\1))*$/;

function isIsogram(str) {
   return re.test( str.toLowerCase() );
}

<强>测试

isIsogram("Dermatoglyphics")
true
re.test("aba")
false
isIsogram("moOse")
false

答案 3 :(得分:1)

我不认为正则表达式是最好的工具,只需使用普通的JS。

function isIsogram(str){
  var chars = str.toLowerCase().split(''), found = {};
  for (var i=0,l=chars.length; i<l; i++){
    if (typeof found[chars[i]] === 'undefined')
      found[chars[i]] = true;
    else return false;
  }
  return true;
}

document.write(isIsogram("Dermatoglyphics")+"<br>")
document.write(isIsogram("aba")+"<br>")
document.write(isIsogram("moOse")+"<br>")