我试图输入一个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);
}
};
}
我尝试了几种不同的方法而没有任何效果。目前,我很茫然,很想了解解决此问题背后的概念。预先谢谢你!
答案 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,然后中断),而不是在循环中登录控制台。如果布尔值为假-您知道该字符串包含无效的字母。