Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
131
rated 0 times [  134] [ 3]  / answers: 1 / hits: 58088  / 10 Years ago, sun, april 20, 2014, 12:00:00

I wanted to write a javascript function to sanitize user input and remove any unwanted and dangerous characters.



It must allow only the following characters:




  • Alfanumeric characters (case insentitive): [a-z][0-9].

  • Inner whitespace, like word1 word2.

  • Spanish characters (case insentitive): [áéíóúñü].

  • Underscore and hyphen [_-].

  • Dot and comma [.,].

  • Finally, the string must be trimmed with trim().



My first attempt was:



function sanitizeString(str){
str = str.replace(/[^a-z0-9áéíóúñü_-s.,]/gim,);
return str.trim();
}


But if I did:



sanitizeString(word1nword2)


it returns:



word1
word2


So I had to rewrite the function to remove explícitly tnfrv:



function sanitizeString(str){
str = str.replace(/([^a-z0-9áéíóúñü_-s.,]|[tnfrv])/gim,);
return str.trim();
}


I'd like to know:




  1. Is there a better way to sanitize input with javascript?

  2. Why n and t doesn't matches in the first version RegExp?


More From » regex

 Answers
12

The new version of the sanitizeString function:



function sanitizeString(str){
str = str.replace(/[^a-z0-9áéíóúñü .,_-]/gim,);
return str.trim();
}


The main problem was mentioned by @RobG and @Derek: (@RobG write your comment as an answer and I will accept it) s doesn't mean what now w3Schools says




Find a whitespace character




It means what MDN says




Matches a single white space character, including space, tab, form
feed, line feed. Equivalent to [
fnrtv​u00a0u1680​u180eu2000​u2001u2002​u2003u2004​u2005u2006​u2007u2008​u2009u200a​u2028u2029​​u202fu205f​u3000].




I trusted in w3Schools when I wrote the function.



A second change was to move the dash character (-) to the end in order to avoid it's range separator meaning.




  • Note 1: This is a server side validation using javascript.

  • Note 2:
    (for IBM Notes XPagers) I love javascript in XPages SSJS. This is
    simpler for me than the Java way.


[#71377] Friday, April 18, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
tristani

Total Points: 318
Total Questions: 95
Total Answers: 106

Location: Saint Lucia
Member since Wed, Feb 8, 2023
1 Year ago
;