2010-11-26 11 views
1

im Grunde brauche ich eine preg_match, die sicherstellt, dass nur ein Leerzeichen zwischen jedem Wort erlaubt ist (wenn es mehr als ein Wort gibt).PHP preg_match benötigt, um sicherzustellen, dass nur ein Leerzeichen zwischen Wörtern erlaubt ist

Meine bestehende Regel ist:

(^[A-Za-z\s]+$) 

Dank.

+0

Wenn es nie einen Fall gibt, in dem Sie mehr als ein Leerzeichen zulassen, z. B. zwischen Sätzen, können Sie einfach * all * mehrere Leerzeichen durch ein einzelnes Leerzeichen ersetzen und sich nicht um die Nähe zu Wörtern kümmern. z.B. '/ {SPACECHAR} +/{SPACECHAR} /'. (Ich habe 'SPACECHAR} anstelle von Leerzeichen verwendet, um es deutlich zu machen, was ich meine.) – dnagirl

Antwort

4

Es hängt davon ab, was Sie unter „Wort“ bedeuten, aber vorausgesetzt, Sie Buchstaben in AZ bedeuten oder az Sie dies versuchen:

^[a-zA-Z]+([a-zA-Z]+)*$ 

Beachten Sie, dass \s tut nicht das Leerzeichen bedeuten - es bedeutet, jede Leerzeichen, einschließlich einer neuen Zeile.

+0

Das funktioniert! Vielen Dank. – GSTAR

1

Ich denke, eine Reihe von Vorkommnissen zu Ihrem Spiel geben Sie setzen also {1} {1,5} (nur 1 oder zwischen 1 und 5 einschließlich passen) so etwas wie ...

^[ A-Za-z] + ({1}) $

+1

auch, stimmt die \ w Flagge nicht überein Wörter? – billythekid

+1

Das funktioniert, ist aber in regulären Ausdrücken unwichtig, es sei denn, Sie möchten es wiederholen. Alle regulären Ausdrücke setzen eine Übereinstimmung pro Zeichen in Zeile voraus, dh {1} ist nur redundant. – austinbv

+0

Heh, danke! Das ist wirklich praktisch. – billythekid

2
/^[\S]+\s?[^\s]?/i 

Wird für jedes Wort mit einem Raum, nachdem es und kein Raum nach diesem einen Raum

/\s?\S+\s/ 

wird für alle Zeichen suchen suchen mit Leerzeichen auf beiden Seiten oder nur auf der Ende.

+0

Die erste Regex funktioniert, aber wenn es nur ein Wort gibt (ohne führende/nachstehende Leerzeichen), schlägt das auch fehl. – GSTAR

+0

Ich habe es gerade bearbeitet jetzt versuchen – austinbv

+0

'/^[\ S] + \ s? [^ \ S]? /' Entspricht einer Zeichenfolge, die mit einem oder mehreren Nicht-Leerzeichen Zeichen beginnt - das ist alles. * Wenn * ihnen ein Whitespace-Zeichen folgt, passt das '\ s?' Dazu, und wenn * das * gefolgt von einem Nicht-Whitespace-Zeichen folgt, wird das '[^ \ s]? Aber keine deiner Regex * verhindert * eine Übereinstimmung von zwei oder mehr aufeinander folgenden Leerzeichen. –

Verwandte Themen