2013-10-17 13 views
19

Ich versuche ein eckiges ng-Muster zu bekommen, um zu überprüfen, ob ein Benutzername keine Whitespaces oder Sonderzeichen hat. Das folgende Formular gibt false zurück, wenn Sie Leerzeichen oder Sonderzeichen eingeben. Es wird jedoch wahr, sobald Sie a-z, A-z oder 0-9 eingeben. Ich habe versucht, ng-Muster = "/ [^ \ s] + /" und \ S und [^], aber sie machen keinen Unterschied.schreibe ein ng-Muster um Whitespaces und Sonderzeichen zu verbieten

<form name="myform"> 
    valid? {{ myform.$valid }} 
    <input type="text" name="username" ng-model="username" ng-pattern="/[a-zA-Z0-9^ ]/" required/> 
</form> 

Hier ist die Form in einem zupfen: http://plnkr.co/edit/6T78kyUgXYfNAwB4RHKQ?p=preview

Antwort

39

Versuchen Sie das folgende Muster:

/^[a-zA-Z0-9]*$/ 

Auf diese Weise können nur alphanumerische Zeichen.

+2

Das war's! Vielen Dank! Ein Hinweis: Vor der eckigen Version 1.1.0 wird das Modell getrimmt, sodass das Hinzufügen eines Leerzeichens vor oder nach dem String nicht false zurückgibt. –

+0

@CraigMorgan Gern geschehen. Ich arbeite überhaupt nicht mit Angular, aber ich weiß, dass es eine Javascript-Bibliothek ist, und ich habe Ihnen einen gültigen regulären Ausdruck in Javascript zur Verfügung gestellt :) –

+11

Nur dazu hinzuzufügen. Angular trimmt das Eingabemodell, was bedeutet, dass die Validierung nicht für Leerzeichen ausgelöst wird. Sie können der Eingabe einen 'ng-trim = "false" 'hinzufügen, um dies zu beheben. – Cristian

12

Um die spezifische Antwort aufzuspüren, die ich gesucht habe, hatte ich bereits das von Sniffer /^[a-zA-Z0-9]*$/ vorgeschlagene Muster, aber eckig schien immer noch führende/nachlaufende Leerzeichen zu ignorieren. Als Cristian mentions in den Kommentaren:

Winkel wird das Eingangsmodell trimmen, was bedeutet, dass die Validierung nicht für Leerzeichen ausgelöst wird. Sie können der Eingabe einen ng-trim="false" hinzufügen, um dies zu beheben.

Beachten Sie, dass Angular versucht, Sie zu schützen, indem standardmäßig Whitespace still abgeschnitten wird. In meinem Fall möchte ich dem Benutzer bewusst sein, dass der nachfolgende Leerzeichen ungültig ist.

+1

Ihr ng-trim hat mir sehr geholfen, weil es im Inneren kantig ist, um Leerräume zu vermeiden –

+0

vereinbart! schöner Tipp. Ich hätte den Regex-Ansatz gewählt, der nicht so gut ist, da der Whitespace sowieso abgeschnitten werden muss. Vielen Dank! – lostdorje