2017-02-17 2 views
1

Ich habe einen regulären Ausdruck der folgenden in Javascript:Regular Expression wiederholendes Muster begrenzt durch Komma

/\w{1,}\s*\w{1,}/ 

Diese prüft, ob eine Zeichenkette jeder atleast zwei Wörter größer als 1 Charakter hat.

Ex-

asd fgh - Valid 
a b d dfd - Valid 
xscxs - Invalid 

Ich habe jetzt eine neue Anforderung, dass ich versucht habe, zu implementieren, kann aber nicht richtig.

Neue Anforderung: Sie können eine kommagetrennte Liste des gleichen Eingabetyps wie zuvor haben. Kann nicht mit einem Komma enden. Jeder Artikel muss gemäß den obigen Regeln gültig sein.
Wenn kein Komma vorhanden ist, dann ist es auch gültig.
Auch alle Zeichen sind Buchstaben und keine Zahlen/Sonderzeichen

Valid: HOH vfdffd,dsfds dfgd,UIU fgfd 
Valid: JOI JOIO 
Invalid: QASW fgdfg, 
Invalid: sdfds,1234 dfgdfg 
Invalid: JKJ,ABCD 
+0

Try [ '^ \ w + (\ s \ w +) + (, \ s * \ w + \ s \ w +) * $'] (https://regex101.com/r/gCz1n8/ 1) – Tushar

+0

könnte es einen Platz in der Nähe von Komma geben, wie 'HOH vfdffd, dsfds dfgd, UIU fgfd'? wäre es gültig? – RomanPerekhrest

Antwort

0

Sie das Muster als [a-zA-Z]+(?:\s[A-Za-z]+)+ für die erste Anforderung angeben 1+ Buchstaben Zeichen übereinstimmen und dann 1+ Sequenzen von einem Leerzeichen entsprechen + einen oder mehr Wort Zeichen, und wiederholen Sie dann einfach das Muster innerhalb einer anderen Gruppe mit einem Komma:

/^[a-z]+(?:\s[a-z]+)+(?:,[a-z]+(?:\s[a-z]+)+)*$/i 

Siehe regex demo (alle \s mit Leerzeichen in der Demo ersetzt, da die Eingabe eines mehrzeiligen String).

Wenn mehrere Leerzeichen zulässig sind, ersetzen Sie \s durch \s+.

Einzelheiten:

  • ^ - Beginn der Zeichenfolge
  • [a-z]+ - 1+ Brief
  • (?:\s[a-z]+)+-1 oder mehrere Sequenzen von (dh ein Raum ist obligatorisch)
    • \s - ein Leerzeichen (fügen Sie + hinzu, um 1 oder mehr ocrcrurences zu entsprechen)
    • [a-z]+ - 1+ Buchstaben
  • (?:,[a-z]+(?:\s[a-z]+)+)* - null oder mehr Sequenzen (d.h. ein Komma ist optional) von
    • , - ein Komma
    • (?:\s[a-z]+)+ - siehe oben
  • $ - Ende der Zeichenfolge.
+0

* Auch alle Zeichen sind Alphabete und keine Zahlen * – RomanPerekhrest

+0

Ok, '\ w' sollte durch' [a-zA-Z] 'oder' [^ \ W \ d_] 'ersetzt werden –

0
.regex(/^(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})(?:(?:\b\,)(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})*$/) 

Explanation: 

(?:\b\,) -> Match with a , at the beginning of the string only if its preceded by a word boundary 
(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4}) -> Match a string with letter and digits only if dont have 4 digits ow 4 letters