2016-12-20 5 views
3

Ich versuche derzeit herauszufinden, wie das oben genannte Problem zu lösen ist. Ich möchte überprüfen, ob die Zeichenfolge nicht enthält das Wort "Stream" sowohl in Groß- und Kleinbuchstaben.Wie kann ich korrekt überprüfen, ob eine Zeichenfolge kein bestimmtes Wort enthält?

Hier ist mein Code so weit:

if (((gewaesser_name1.includes("Stream") == "false") || 
(gewaesser_name1.includes("stream") == "false")) && 
((gewaesser_name2.includes("Stream") == "false") || 
(gewaesser_name2.includes("stream") == "false"))) 
{var a= "..."} 

Der Code funktioniert natürlich nicht, da die Ergebnisse nicht, was ich erwarten, dass sie zu sein. Ich habe auch versucht die indexOf Methode zu verwenden, bevor Sie die folgenden Syntaxvarianten mit:

gewaesser_name2.indexOf("stream") == -1 
gewaesser_name2.indexOf("stream") < 0 

Keine dieser Varianten für mich zu arbeiten scheinen. Könnte mir bitte jemand einen Hinweis geben, was ist das Problem hier? Ich habe die Methode indexOf schon oft benutzt, aber immer, wenn ich überprüfen wollte, ob eine Zeichenfolge ein bestimmtes Wort enthielt, und nicht umgekehrt.

+1

den Fall Normalisieren vor der Prüfung. 'if (! name.toLowerCase(). includes (" stream ")) {..' –

+0

Sie sollten' && ', nicht' || 'verwenden. – Barmar

Antwort

0

Ich schlage vor, String+toLowerCase zu verwenden und mit String#indexOf zu überprüfen, weil es in jedem Browser funktioniert.

if (gewaesser_name1.toLowerCase().indexOf("stream") === -1 && gewaesser_name2.toLowerCase().indexOf("stream") === -1) { 
    var a = "..." 
} 
3

indexOf() ist der richtige Ansatz, und der Fall Problem kann leicht durch Drücken des Teststrang gelöst werden, um zu Unter- oder Ober Fall vor dem Test mit .toLowerCase() oder .toUpperCase():

const lookupValue = "stream"; 
 
const testString1 = "I might contain the word StReAm and it might be capitalized any way."; 
 
const testString2 = "I might contain the word steam and it might be capitalized any way."; 
 

 
function testString(testData, lookup){ 
 
    return testData.toLowerCase().indexOf(lookup) === -1; 
 
} 
 

 
function prettyPrint(yesNo){ 
 
    return "The string does" + (yesNo ? " NOT" : "") + " contain \"stream\" in some form." 
 
} 
 

 
console.log(prettyPrint(testString(testString1, lookupValue))); 
 
console.log(prettyPrint(testString(testString2, lookupValue)));

0

dies ist ein Vorgang, den Sie in regex tun können:

const testString1 = "I might contain the word StReAm and it might be capitalized any way."; 
 
const testString2 = "I might contain the word steam and it might be capitalized any way."; 
 
const re = /stream/i 
 
console.log(!!(testString1.match(re))); 
 
console.log(!!(testString2.match(re)))

0

Sie können die zurückgegebenen Ergebnisse vergleichen möchten Ihrer include() mit genau gleich Operanden, == = false oder === true, es ist viel bessere Übung, aber nicht wirklich notwendig, sieht nur so aus, als könnten Sie davon profitieren, das Unterschiedliche zu kennen, da das Vergleichen von Booleschen Werten mit einer Zeichenkette eine seltsame Sache ist. Ich würde auch nicht "Stream" und "stream" überprüfen versuchen mit toLowerCase() stattdessen wie folgt, var str1_check = gewaesser_name1.toLowerCase();

Ich würde für Stream mit dem Kleinbuchstaben "Stream" als Ihre neuen Zeichenfolgen werden alle in Kleinbuchstaben, sowie Sie wollen, dass sie getrennt von Ihren ursprünglichen Variablen, wie Sie nicht wollen, dass diese Namen in Kleinbuchstaben gezwungen werden. Ich würde str1_check.includes ("stream") verwenden, um zu prüfen, ob diese Zeichenfolge die Zeichenfolge "stream" enthält, da dieses Ergebnis truthy oder falsch ist, können Sie Ihre Überprüfung wie folgt durchführen.

if(str1_check.includes("stream")) { 
//this string contained stream 
} 

I sieht aus wie Ihre, wenn Logik hier war, wenn der erste Name nicht enthält „Strom“ oder den Namen 1 und 2 enthalten kein Strom, sondern Ihre Überprüfung Name 1 mit Klein „Strom“ und Name 2 mit Groß "Strom". Es sieht so aus, als ob Sie beide Namen nicht als Stream haben wollen, dies kann viel einfacher so durchgeführt werden.

var str1_check = gewaesser_name1.toLowerCase(), 
str2_check = gewaesser_name2.toLowrCase();//this way you're not making  multiple toLowerCase calls in your conditional and maintain the state of your two names. 

if(!str1_check.includes("stream") && !str2_check.includes("stream")){ 
//your code on truthey statement 
} 
0

Ich würde es vorziehen Javascript RegExp wie folgt zu verwenden:

function includesMatch(lookupValue, testString){ 
 
    var re = new RegExp(lookupValue, 'i'); //Here the 'i' means that we are doing a case insensitive match 
 
    return testString.match(re) !== null 
 
} 
 

 
var lookup = "stream"; 
 
var test1 = "do I have a StrEAm in me?"; 
 
var test2 = "well at least I don't"; 
 
console.log(includesMatch(lookup, test1)); 
 
console.log(includesMatch(lookup, test2));

0

Danke für die schnelle Feedback Jungs, wird der Code läuft jetzt völlig in Ordnung!

Ich verwende den folgenden Code ein:

`if  (gewaesser_name1.toLowerCase().indexOf("stream") === -1 && gewaesser_name2.toLowerCase().indexOf("stream") === -1) 
     {var a = "does NOT contain stream"} 

else {var a= "does contain stream"} 

`

+0

Bitte posten Sie keine Antwort auf Ihre eigene Frage, wenn Sie bereits eine andere Antwort als Antwort markiert haben. –

Verwandte Themen