2013-02-21 21 views
5

Sono di questo codice:problemi con direttiva ngPattern

<form name="test"> 
    <input type="text" ng-model="code" name="code" ng-pattern="/^code_[0-9]+$/"/> 
    <div ng-show="test.code.$dirty && test.code.$invalid"> 
     Error: 
     <span ng-show="test.code.$error.pattern">Pattern fail.</span> 
    </div> 
</form> 

Ho 2 problemi con questo codice:

  1. stringhe come "code_232", "code_232" "code_232" passare la convalida . Io non sono esperto con regex, quindi questo potrebbe essere un problema semplicemente legato alla regex ho scritto: /^code_[0-9]+$/

  2. Se mi metto a scrivere "code_23892" (una corretta stringa), ottengo l'errore messaggio mentre i' m ancora scrivendo (test.code.$error.pattern = true). C'è un modo integrato per evitare questo? Quindi il mio comportamento è desiderata:

se scrivo "baccalà", e l'ingresso è ancora concentrarsi: nessun errore

se scrivo "cod" e l'ingresso perde il fuoco: errore.

Se scrivo "a", "ca", "coa" ecc .: errore, il motivo è già stato violato.

È già possibile, o ho scritto una direttiva di convalida del custome per raggiungere questo obiettivo?

Grazie in anticipo.

risposta

9

Il motivo per cui uno spazio bianco non attiva una convalida non riuscita è perché ng-model riduce automaticamente il valore. Se non lo desideri, puoi aggiungere ng-trim="false" al numero <input />. Si noti che ng-trim è un attributo abbastanza nuovo, quindi potrebbe essere necessario aggiornare la versione angolare.

Sulla tua seconda domanda; Non penso che sia possibile evitare la convalida per l'esecuzione durante il periodo di digitazione, ma è possibile modificare il codice in modo che visualizzi l'errore solo quando l'input perde lo stato attivo. Non penso che esista qualcosa come ng-blur e ng-focus, ma dovrebbe essere piuttosto semplice implementarle.

+0

sto usando AngularJS 1.0.5 (rilasciato oggi) ... ng-trim = "false" non funziona – Bruno

+0

Penso che ng-trim sia nuovo in 1.1, che è ancora instabile, sfortunatamente. EDIT: È nel registro delle modifiche 1.1 qui: https://github.com/angular/angular.js/blob/master/CHANGELOG.md#1.1.1 –

+0

+1 Grazie per il tuo aiuto! Aspetterò più risposte prima di accettare la tua risposta. – Bruno