A parte il tuo problema, ma qui anche le esprssioni regolari non vanno:
var pattern =/[0-9,|, +, --, =, <, >, !=, (, ), %, @, #, *]/ ;
perchè le virgole e gli spazi?
Nelle espressioni regolari gli spazi non sono opzionali, ma significano esattamente: qui uno spazio.
Se la metti dentro parentesi quadre, non è come per le funzioni che devi separare gli "argomenti" con una virgola. Devi mettere (fra parentesi QUADRE) i caratteri in sequenza senza virgole o spazi, il trattino segnala invece un range di caratteri o alfabetici o numerici 0-9a-zA-Z o anche, semmai, a-d 3-6. In tal caso per segnalare invece il trattino come tale e non come indicante un range, gli premetti il carattere di escape: \-
perchè le parentesi attorno ad una virgola?
Cioè guarda quando metti i caratteri in una espressione regolare fra parentesi quadre, significa che cerchi un qualsiasi carattere che sia fra quelli messi.
Inoltre, non ti permette di trovare combinazioni di simboli come != ma solo simboli isolati
Se tu hai messo !=
con la idea di trovare: !=
no, ti ritornerà true per qualsiasi istanza ISOLATA di ! o di =
per cui, semmai
var pattern =/[0-9|+\-,<>!=%@#*]/ ;