Ich suche ein regular expression
, das Sonderzeichen verhindert und nur Buchstaben, Zahlen, Bindestriche (-) und Unterstriche (_) ein Leerzeichen zulässt.
Diese Regex funktioniert hervorragend, lässt jedoch keine Leerzeichen zwischen Wörtern zu.
Wenn Sie beispielsweise "123 456"
eingeben, wird ein benutzerdefinierter Fehler angezeigt, den ich definiert habe. Wie ich diese Registrierung optimieren kann, um neben Buchstaben, Zahlen, Bindestrichen und Unterstrichen auch Platz zwischen Wörtern zu lassen.
<input type="text" name="serialNumber" data-ng-model="SerialNumber" ng-pattern="/^[a-zA-Z0-9_-]*$/" maxlength="100"/>
<div data-ng-if="Form.serialNumber.$error.pattern" class="error">Please enter valid serial number</div>
5 Antworten
Wenn Sie ein Leerzeichen in Ihrer Eingabe zulassen möchten, müssen Sie es in die Zeichenklasse aufnehmen.
Laut Dokumenten:
ngTrim (optional)
Bei Einstellung auffalse
schneidet Angular die Eingabe nicht automatisch. Dieser Parameter wird fürinput[type=password]
Steuerelemente ignoriert, die die Eingabe niemals kürzen.
(Standard: true)
Wenn Ihr Eingabefeld kein Passwortfeld ist, würde ich empfehlen:
ng-pattern="/^[\w -]*$/"
Das \w
steht in JS für [A-Za-z0-9_]
, der Unterstrich muss nicht maskiert werden und der Bindestrich am Ende der Zeichenklasse muss auch nicht maskiert werden.
^[a-zA-Z0-9_-]+(?:\s+[a-zA-Z0-9_-]+)*$
Konstruieren Sie Ihre Regex auf diese Weise, um words
und nicht spaces
am Anfang oder Ende zu erfassen.
Ich denke, ich habe eine sehr einfache und grundlegende Lösung für meine Anforderung gefunden i.e. to allow alphanumeric, _, - and space. Space should be allowed between word and not leading and trailing space.
ng-pattern="/^[a-zA-Z0-9\_\- ]*$/"
Wenn jemand Probleme damit hat, lassen Sie es mich bitte wissen.
Sie können den folgenden auf Lookaround basierenden regulären Ausdruck ausprobieren.
^(?!\s)(?=$|.*[a-zA-Z0-9_-]$)[a-zA-Z0-9_\s-]*$
Verwenden Sie dieses Muster, um das Problem zu lösen
ng-pattern="/^(\D)+$/"