2012-12-17 13 views
5

Come posso estendere Regex già presente con un attributo che dice che la regex non può superare una lunghezza massima di (diciamo) 255?Aggiunta di "Lunghezza massima" a Regex

ho la seguente espressione regolare:

([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)

ho provato in quel modo, ma non è riuscito:

{.,255([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)}

+1

verificare la lunghezza del risultato abbinato? – Cameron

+0

'{., 255}' Dopo l'espressione. –

risposta

10

Il modo migliore per farlo, se deve essere una soluzione basata esclusivamente su espressioni regolari, è di utilizzare i lookaround.

Guarda questo esempio: http://regex101.com/r/yM3vL0

Quello che sto facendo qui è solo la corrispondenza stringhe che sono al massimo tre caratteri. Certo, per il mio esempio, questo non è il modo migliore per farlo. Ma ignoralo, sto solo cercando di mostrare un esempio che funzionerà per te.

si hanno anche per ancorare il vostro modello, altrimenti il ​​motore sarà solo ignorare la Lookaround (devo spiegare questo in modo approfondito?)

In altre parole, è possibile utilizzare il seguente nella vostra espressione regolare per limitare a un massimo di 255 caratteri:

^(?!^.{256})([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?) 

anche io sento che è mio dovere di dirvi l'espressione regolare è male e si dovrebbe stare male.

+0

+1, hai perfettamente ragione, ovviamente. Ho rimosso completamente la regex.Ma comunque il tuo post mi ha aiutato a capire meglio la regex :) Grazie per quello! – SeToY

+1

Nessun problema! Consulta il quiz su http://www.regex101.com/quiz/ se vuoi capire le espressioni regex ancora meglio :) –

+0

@Lindrian, grazie per il link. –

0

Un'espressione regolare non è davvero fatto per risolvere tutti i problemi. In questo caso, suggerirei che testare una lunghezza di 255 sarà costoso, perché questo richiederà 255 stati nella rappresentazione sottostante. Invece, basta testare la lunghezza della stringa separatamente.

Ma se proprio deve, è necessario per rendere il vostro personaggi opzionale, quindi qualcosa di simile:

.?{255} 

corrisponderà a qualsiasi stringa di 255 caratteri o meno.

+0

Ma permetterà a chiunque di mettere 255 caratteri casuali davanti al tuo indirizzo email !!! – jessehouwing

1

Perché non controllare anche la lunghezza massima della stringa? Se stai usando DataAnnotations, puoi attaccare [StringLength (255)] sulla proprietà.

Se si utilizzano i validatori di ASP.NET, è possibile utilizzare un RangeValidator.

Se si utilizza una funzione di convalida personalizzata è molto più leggibile (e più veloce) controllare la lunghezza prima di lanciare un'espressione regolare complessa su di essa.

0

You "potrebbe" essere in grado di utilizzare un look-ahead come segue:

^(?=.{0,255}$)your regex here$ 

Quindi ...

^(?=^.{0,255}$)([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$