【问题标题】:How can I check if a string only contains certain letters, and if it has others, it returns false如何检查字符串是否仅包含某些字母,如果有其他字母,则返回 false
【发布时间】:2018-06-22 19:25:59
【问题描述】:

我正在尝试获取 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);
    }
 };

}

我尝试了几种不同的方法,但没有任何效果。我现在不知所措,很想了解解决这个问题背后的概念思考。提前谢谢!

【问题讨论】:

  • const isValid = str =&gt; !/[^GCTA]/.test(str);
  • 或者删除双重否定并使用/^[GCTA]*$/.test(str),也许这样更容易阅读。

标签: javascript arrays string validation


【解决方案1】:

你可以使用some函数:

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

【讨论】:

    【解决方案2】:

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

    [^GCTA]
    

    将匹配任何不在您允许的字符中的内容,因此您可以这样做:

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

    【讨论】:

    • 虽然很高兴看到使用正则表达式的答案,但您为什么要使用 matchg 标志?
    • 关于比赛,这是因为我不知道更好的选择。 g 标志不是必需的,但我之前没有意识到。
    • 请参阅RegExp.prototype.test - 这在这里是可取的,但不会从根本上改变任何东西。我之所以提到它,是因为我之前曾发布过一种使用正则表达式作为评论的方法,并且想知道它是否只是被忽视了。
    • 感谢您的链接。是的,它确实被忽视了,我的错。
    • 感谢您的有用回答!我在想一个正则表达式是要走的路,但老实说,作为一个新手 javascript 程序员,我还没有获得太多使用正则表达式的经验。这将是一个很好的起点。再次感谢!
    【解决方案3】:

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

    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]);
       }
    
     }

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 2014-07-16
      • 2015-01-04
      • 1970-01-01
      相关资源
      最近更新 更多