2017-02-22 6 views
0

Ich habe eine Textbox, in denen ich Benutzer zur Eingabe anderer Werte beschränkt sind als alphanumerischen Schlüssel und Slash mit folgendenWenn alle Zeichen nicht Kombination aus Null und Sonderzeichen sind

regex = /[^a-zA-Z0-9/]+$/g; 

so kann der Benutzer nicht eingegeben das Sonderzeichen außer Schrägstrich /.

Jetzt gibt es ein neues Szenario, in dem ich entweder diese Kombination nicht den Benutzer zur Eingabe will:

  • 0
  • 00/00/000/
  • 0////
  • ////
  • 000/000/
  • usw.

Die Eingangsgröße des eingegebenen Textes ist 20, so könnte jede Länge möglich sein, meine Sorge ist, andere Zeichen als 0 oder / gültig ist.

Diese sollten gelten:

  • 01/001/01/
  • 01
  • 1
  • a1/12
  • 00/10/00/1
  • 1/1/1/1/00
  • 0/00/0

Alles andere als Null oder Schrägstrich in der Eingabe ist gültig. Sogar ein einzelnes Vorkommen eines Alphabets oder eine Zahl größer als Null macht es gültig.

Jede Hilfe ist sehr bemerkenswert. Reguläre Ausdrücke sind sehr willkommen. Vielen Dank im Voraus.

+0

Ihr letztes Beispiel für einen gültigen Eingang '0/00/0' scheint der Beschreibung zu widersprechen? Ist es nur, wenn der Schrägstrich am Ende ist? – whrrgarbl

+0

@whrgrarbl es ist nicht der Fall, die Zeichen können irgendwo zwischen eins bis zwanzig terminieren, spielt keine Rolle, wenn das Endezeichen Null oder Schrägstrich ist, sollten sie mindestens eine Zahl ungleich Null sein, oder ein Alphabet – Mavericks

+0

Okay, so ... sollte dein letztes Beispiel * nicht * übereinstimmen? – whrrgarbl

Antwort

0

Zuerst Ihr Anker ist an der falschen Stelle, negiert die Zeichen zulassen möchten:

regex = /[^a-zA-Z0-9/]+$/g; 
     ^

Move it hier:

regex = /^[a-zA-Z0-9/]+$/g; 
     ^

Hier ist die Lösung. Ich habe angedeutet, was ich mit „+“ hinzugefügt:

regex = /^(?![0/]+$)[a-zA-Z0-9/]+$/g; 
      ++++++++++ 

Das (?!foo) Muster ist bekannt als negative Vorschau, die Javascript unterstützt. Es schlägt fehl, wenn die kommenden Zeichen mit foo übereinstimmen. Wenn die nächsten Zeichen also Nullen oder Schrägstriche sind, schlägt die Übereinstimmung fehl. Und dann geht es weiter zur Überprüfung, ob alle Zeichen alphanumerisch oder Schrägstrich sind.

Wie @Mawicks bemerkt, weiß ich nicht, was los ist mit Ihrem letzten Fall, "0/00/0".

0

Try this:

regex = /(^[^a-zA-Z0-9/]+$)|(^[0/]+$)/g

Dies fügt einfach eine zweite Match-Gruppe am Ende: (^[0\/]+$) zu überprüfen, ob es vollständig 0 und Slash.

Verwandte Themen