2013-08-15 22 views
5

Ho alcune stringhe che voglio pulire rimuovendo tutti i caratteri non alfanumerici dall'inizio e dalla fine.Come tagliare tutti i caratteri non alfanumerici dall'inizio e alla fine di una stringa in Javascript?

Dovrebbe funzionare su queste stringhe:

)&*@^#*^#&^%$text-is.clean,--^2*%#**)(#&^ --->> text-is.clean,--^2 

[email protected]#$%,.-"^&[email protected],--^#*%#**)(#&^ --->> [email protected] 

ho questo regex, che li rimuove dal l'intera stringa:

val.replace(/[^a-zA-Z0-9]/g,'') 

Come potrei cambiare a solo rimuovere dall'inizio e fine della stringa?

+0

No, è stato un cattivo esempio, l'ho risolto. –

risposta

6

Modificare il vostro attuale RegExp per specificare l'inizio o la fine della stringa con ^ o $ e renderlo avido. È quindi possibile collegare i due insieme a un OR |.

val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, ''); 

Questo può essere semplificata a-z con i la bandiera per tutte le lettere e \d per i numeri

val.replace(/^[^a-z\d]*|[^a-z\d]*$/gi, ''); 
+0

Meglio usare il quantificatore '+' piuttosto che '*'. Perché sostituire nulla con niente? – ridgerunner

4

È necessario utilizzare ancore - ^ e $. E anche, si avrebbe bisogno di un quantificatore - *:

val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g,'') 
4

Utilizzare i tasselli per abbinare l'inizio e la fine della stringa:

val.replace(/^[^A-Z0-9]+|[^A-Z0-9]+$/ig, '') 
+1

La tua seconda regex non funzionerebbe come la prima. Non corrisponderebbe a '@' nel mezzo, che OP vuole. –

+0

@RohitJain: Sì, hai ragione. – Blender

+0

+1 per usare il quantificatore '+' piuttosto che '*'. (Non ha senso sostituire zero caratteri con niente ed è meno efficiente). – ridgerunner

1

Usa ancore ^ e $ per abbinare le posizioni prima del primo carattere e dopo ultimo carattere nella stringa.

val.replace(/(^[^A-Za-z0-9]*)|([^A-Za-z0-9]*$)/g, ''); 

Si può anche ridurre il codice utilizzando \W che significa carattere non alfanumerico, scorciatoia per [^a-zA-Z0-9_] nel caso in cui si desidera mantenere sottolineatura pure.

val.replace(/(^\W*)|(\W*$)/g, ''); 
Problemi correlati