2016-04-27 11 views
0

Ich muss erkennen, ob ein Wert in einem Eingang enthält die Buchstaben "sn" gefolgt von einem Bindestrich (nicht sofort, die Eingabe wird sn12345 - mehr Text) und wenn ja, Führen Sie dann eine Funktion aus, die einwandfrei funktioniert, es sei denn, der Benutzer gibt Wörter wie "ist nicht" oder "war nicht" ein.jQuery überprüfen, ob die Zeichenfolge, wenn mit anderen Buchstaben vorangestellt

Gibt es einen Weg, dass ich erkennen kann, ob es Buchstaben vor "sn" gibt und ob die Funktion ausgeführt werden soll oder nicht. Ich habe erwogen, nach dem Apostroph zu suchen, aber einige Benutzer sind ziemlich faul, wenn sie die betreffende Eingabe eingeben und sie nicht verwenden.

var lowercase_name = subject.toLowerCase(); 
var has_sn = lowercase_name.indexOf("sn") > -1; 
    if(has_sn === true){ 
     var has_hyphen = lowercase_name.indexOf("-") > -1; 
      if(has_hyphen === false){ 
       //alert user missing hyphen 
      }; 
       return false; 
      } 
    } 

Ich habe auch überprüft prüfen, ob die „sn“ durch ein Leerzeichen vorangestellt wird, aber wenn es am Anfang des Eingangs verwendet wird (was es höchstwahrscheinlich in diesem Fall), die scheitern.

+1

Auf diese Weise getrennt nach 'sn' und' -' zu suchen macht keinen Sinn - denn wie du es gerade machst, braucht es nur ein '-' _anywhere_ in der Zeichenkette. Wenn du nach 'sn-'suchen willst, warum benutzt du das dann nicht für indexOf?/Ein regulärer Ausdruck könnte dafür besser geeignet sein; es erlaubt Ihnen, vor dem "sn" nach einer _word boundary_ zu suchen und den sn-at-anfangsteil mit dem Start-of-line-Anker '^' zu integrieren. – CBroe

+0

Ich muss nur nach einem Bindestrich suchen, wenn sn existiert, aber manchmal meine Benutzer als Leerzeichen nach dem sn. Das Skript, so wie es ist, funktioniert gut, außer wenn Leute Wörter benutzen, die sn in ihnen haben. – tatty27

+0

Wenn Sie mit regulären Ausdrücken enden, finden Sie möglicherweise nützlich: http://StackOverflow.com/Questions/641407/javascript-negative-lookbehind-equivalent –

Antwort

1

Da Sie es sagen kann oder nicht Räume zwischen sn und Ihrem Schlag sein können, und Sie wollen nicht in den Fällen entsprechen, wo sn durch andere Buchstaben vorangestellt ist, können Sie einen regulären Ausdruck wie verwenden:

var lowercase_name = subject.toLowerCase(); 
var has_sn = lowercase_name.indexOf("sn") > -1; 
    if(has_sn === true){ 
     var snIsNotPrecededByLetters = lowercase_name.match(/\bsn/g); 
     var has_hyphen = lowercase_name.indexOf("-") > -1; 
      if(has_hyphen === false){ 
       //alert user missing hyphen 
      }; 
       return false; 
      } 
    } 

Die "\ b" im Regex-String stimmt nur mit dem "sn" überein, wenn ihm keine Buchstaben vorangestellt sind.

+0

der Hypen ist irrelevant, ich will nur wissen, ob es irgendwelche Buchstaben vor dem sn gibt, die anzeigen würden, dass der sn tatsächlich Teil eines anderen Wortes ist wie nicht oder nicht – tatty27

+0

dann verwenden Sie Kleinbuchstaben_Name.Match (/ \ bsn \ s */g); –

+0

kannst du mir bitte zeigen, wie das in meine Funktion passen würde? Ich kenne Regex noch nicht. – tatty27

Verwandte Themen