2016-04-15 13 views
1

Antwort @Wiktor Stribiżew vorgeschlagen zu entfernen:JavaScript - Regex-Code/Sonderzeichen/Zahlen usw.

function myValidate(word) { 
    return (word.length === 1 || /[^A-Z]/i.test(word)) ? true : false; 
    } 

Hallo bei der Erstellung eines Arrays ich eine Funktion haben, die nicht Wörter mit bestimmten Zeichen erlaubt etc auf das Array

function myValidate(word) { 
     // No one letter words 
     if (word.length === 1) { 
      return true; 
     } 
     if (word.indexOf('^') > -1 || word.indexOf('$') > -1) { 
      return true; 
     } 
     return false; 
    } 

es mag nicht die richtige Art und Weise des Gehens über dieses und ive Blick in eine Regex scheint hinzugefügt werden, die damit umgehen würde, aber noch nicht erfolgreich gewesen Umsetzung versuchte zahlreiche Bemühungen wie:

if (word.match('/[^A-Za-z]+/g')) { 
      return true; 
     } 

kann jemand ein wenig Licht auf die richtige Art und Weise der Handhabung dieses?

+0

Definieren * Sonderzeichen *? Oder sagen Sie uns, welche Zeichen akzeptabel sind und welche nicht. Bitte geben Sie auch ein paar Beispiele an. – Shafizadeh

+0

Diese Funktion durchläuft ein Array namens "words", das Elemente enthält, die "Wort" genannt werden. Jedes "Wort" -Element ist ein Wort, das von einer zufälligen Website abgekratzt wird. Beim Scraping können manchmal unerwünschte Ergebnisse auftreten. Daher validiere ich diese Wörter, indem ich sicherstelle, dass sie keine Sonderzeichen oder Zahlen haben, bevor sie in das Array gelangen. Wenn die Variable "word" mit etwas abgefangen wird, das nicht A-Za-z ist, geben wir true zurück, was dem Array-Builder sagt, es zu ignorieren. – ZiNG

+1

Suchst du nicht [so etwas] (https: // jsfiddle .net/64fs5wdj /)? –

Antwort

1

Ich schlage vor, eine einfachere Lösung mit:

function myValidate(word) { 
 
    return (word.length === 1 || /[^A-Z]/i.test(word)) ? false : true; 
 
} 
 
var words = ["Fat", "Gnat", "x3-2741996", "1996", "user[50]", "definitions(edit)", "synopsis)"]; 
 
document.body.innerHTML = JSON.stringify(words.filter(x => myValidate(x)));

Wo:

  • word.length === 1 Prüfungen für die Stringlänge
  • /[^A-Z]/i.test(word) überprüft, ob ein Nicht-ASCII-Buchstaben-Symbol in der Zeichenfolge ist

Wenn eine der oben genannten Bedingung erfüllt ist, wird das Wort aus dem Array genommen . Der Rest bleibt.

+1

musste die falsche mit der wahren für meine Situation tauschen, aber dies hat super funktioniert, danke! 'zurück (word.length === 1 || /[^A-Z]/i.test(word))? true: false; ' – ZiNG

+0

Ja, ich habe gerade die" false: true "Reihenfolge für die' .filter() 'Funktion verwendet. –

0

EDIT: mit test statt match

Sie wollen test() verwenden, da es eine Bool zurückgibt Sie sagen, wenn Sie die Regex übereinstimmen oder nicht. Die match() gibt stattdessen immer die übereinstimmenden Elemente zurück. Diese können durch Zwang in true umgewandelt werden. Das ist nicht was du willst.

Um es allen zu Sie ihn nur Einzeiler verwenden können (keine if benötigt und keine entweder Zitate, kann jede einfacher nicht erhalten):

return word.test(/^[a-zA-Z][a-zA-Z]+$/); // two letter words 

Sie sollten Zeichen statt schwarze Listen weiße Liste. Das ist einer der Sicherheitsprinzipien. In Ihrem Fall nicht sagen, was falsch ist, aber sagen, was richtig ist:

if (word.test('/^[a-zA-Z]+$/')) { // two letter words 
    return false; 
} 

Diese für alle Wörter falsch zurück, die nur [a-zA-Z] Zeichen enthalten. Ich denke, das ist was du willst.

Ihre Regex hat stattdessen nach unzulässigen Zeichen gesucht, indem sie die Zeichengruppe mit der führenden ^ negiert.


Zwei Empfehlungen:

  1. Gerade Regex in einer positiven Art und Weise verwenden (ohne Negation) und es wird viel einfacher zu verstehen sein.

  2. Auch geben Validierungsfunktionen normalerweise true für gute Daten und false für schlechte Daten zurück.

Es ist besser lesbar auf diese Weise:

if (validate(data)) 
{ 
    // that's some good data we have here! 
} 
+0

Das sieht so aus, als ob es richtig wäre und was ich will, aber es funktioniert nicht. – ZiNG

+0

Ok. Es bedeutet: von Anfang bis Ende, mindestens 1 Zeichen, nur im angegebenen Bereich. Bist du sicher, dass es keine anderen Charaktere gibt? wie Leerzeichen oder Ziffern? – pid

+0

Mein Array erhält immer noch Wortelemente wie: "x3-2741996", "1996", "Benutzer [50]", "Definitionen (bearbeiten)", "Synopsis)" – ZiNG

Verwandte Themen