如何检查字符串是否仅包含某些字母,如果包含其他字母,则返回false

时间:2018-06-22 19:26:00

标签: javascript arrays string validation

我试图输入一个input:text字段的值,然后检查该字符串是否仅包含有效字符。有效字符为“ G,C,T,A”。我正在尝试为该字符串编写验证,以便如果该字符串包含无效字母,则将其踢回用户并仅要求输入有效字母。

如何只检查字符串中的某些字符?

let rnaTransResult;
let validLetters = ["G", "C", "T", "A"];

runBtn.addEventListener('click', function(){
  let dna = userInput.value.toUpperCase();

  rnaTranscribe(dna);

  result.textContent = rnaTransResult;
});

function rnaTranscribe(dna){
  let dnaArray = dna.split('');

  for(let x = 0; x < dnaArray.length; x++){

    if(dnaArray[x] != validLetters[x]){
      console.log("invalid letters");
      return false;
    } else {
      for(let i = 0; i < dnaArray.length; i++){
        if(dnaArray[i] === "G"){
         // console.log("G swap for C");
          dnaArray[i] = "C";
        }  
      }
      console.log("end result: " + dnaArray);
      rnaTransResult = dnaArray.join('');
      console.log("Transcription complete - Result: " + rnaTransResult);
    }
 };

}

我尝试了几种不同的方法而没有任何效果。目前,我很茫然,很想了解解决此问题背后的概念。预先谢谢你!

3 个答案:

答案 0 :(得分:2)

您可以使用some函数:

...
let letter = dnaArray[x];
if (validLetters.some(l => l === letter))
...

答案 1 :(得分:1)

您也可以使用正则表达式来实现。

[^GCTA]

将匹配您允许的字符以外的任何内容,因此您可以执行以下操作:

if(dnaArray.match(/[^GCTA]/)){//if dnaArray contains anything that isn't G,T,C,A
  ...
}

答案 2 :(得分:0)

作为一个非常幼稚的解决方案:遍历字符串的长度并进行比较以查看数组是否包含当前索引处的值。有更好的方法可以做到这一点,但这应该清楚地表明正在发生的事情及其背后的逻辑

let validLetters = ["G", "C", "T", "A"];

let dnaArray = "GCTATAB"

for(let x = 0; x < dnaArray.length; x++){
  if(!validLetters.includes(dnaArray[x])){
    console.log("invalid letter: " + dnaArray[x]);
   }

 }

您可以设置一个布尔变量(最初设置为true,如果循环中有无效字母则将其设置为false,然后中断),而不是在循环中登录控制台。如果布尔值为假-您知道该字符串包含无效的字母。