Domanda

sto usando monorotaia, ActiveRecord, e jQuery. Ho una forma con una casella di testo codice postale. Ho nella mia classe record attivo associato al modulo:

[Property]
        [ValidateNonEmpty]
        [ValidateRegExp(@"/^\d{5}(-\d{4})?$/", "Invalid")]
        public string ZipCode { get; set; }

Come si può vedere, sto usando l'attributo ValidateRegExp, che poi genera automaticamente le regole Convalida jQuery. Il problema è che le espressioni regolari sono diversi in javascript da quello che sono in C #. Javascript richiede un / prima e dopo la regex, mentre C # non lo fa. Se metto le barre allora la convalida jQuery funzionerà, ma se bypass la convalida javascript e inviare il modulo con js disabilitato (o se qualcuno salva l'oggetto con un altro mezzo, come un banco di prova), allora si dirà il codice postale è valida perché C # non lo fa, come le barre.

Quindi la mia domanda è, come si fa a soddisfare sia javascript e C # con una regex? Mi aspetto che sia abbastanza intelligente per aggiungere barre prima e dopo solo per la convalida jQuery in modo che è possibile specificare l'espressione regolare in C # senza i tagli, ma non è questo il caso sembra.

È stato utile?

Soluzione

Si dovrebbe essere specifica l'espressione regolare in sé, senza i caratteri / circostanti.

Se si riscontrano problemi con il lato client, sarebbe utile se si desidera includere l'errore JS che si vede (se presente), e proprio codice JS generato nella pagina che viene scritto dal monorotaia alla tua pagina, e anche la versione di monorotaia in uso.

Come nota a margine, consente di guardare il codice che genera la regola di convalida JS dall'attributo convalida in JQueryValidator.cs

il pezzo in questione è in linea 378 (a partire dalla versione corrente del codice di base):

           "function(value, element, param) { return new RegExp(param).test(value); }" 

che punta al fatto che il new RegExp(expression) viene utilizzato, anziché il formato /expression/. Con questo - è chiaro che l'integrazione di jQuery validatore di monorotaia è ok

.

Altri suggerimenti

Sto usando jQuery 1.4.2. Non sei sicuro di quale versione di monorotaia che sto utilizzando, la dll Castle.MonoRail.Framework dice v2.0.0.0. Ho aggiornato che negli ultimi 3 mesi anche se così è abbastanza nuovo. I js che si sta mostrando indica che si dispone di una versione ancora più recente di me, in quanto genera la seguente per me (se non ci sono tagli inclusi nell'espressione ValidateRegExp):

"user.username": {required: true, regexp: ^ [\ w] {4,50} $}

In questo modo, ovviamente, un errore di sintassi nella js, in quanto non è avvolto tra virgolette o barre. Ho finito per creare un nuovo validatore RegExp con AbstractValidator come classe base per aggirare quello difettoso che è nella mia versione della monorotaia.

fai a sapere se questo era un problema che è stato risolto negli ultimi due mesi? In caso contrario, non riesco a spiegare come la vostra genera nuova RegExp in js e il mio non ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top