views:

51

answers:

3
+1  A: 

To find which characters fails, split it with /[A-Za-z\s.&]+/, you will get invalid characters list

"test/string".split(/[A-Za-z\s.&]+/).join('')
/

To check username is valid or not, you could just use ^ and $ anchors.

/^[A-Za-z\s.&]+$/
S.Mark
I think he's got that part covered, but he wants to find out *why* the match failed, i. e. on which character.
Tim Pietzcker
Thanks @Tim, updated
S.Mark
+1  A: 

Just negate your character class and find out which character(s) match.

[^A-Za-z\s.&]

will match the / in test/string. So, altogether you get

if (/^[A-Za-z\s.&]+$/.test(subject)) {
    // Successful match
} else {
    result = subject.match(/[^A-Za-z\s.&]/g);
    // result is an array that contains all the characters that failed the match
}
Tim Pietzcker
+2  A: 

You could remove the valid chars and you'll have a string of the invalid ones:

var invalid = "test/string".replace(/[A-Za-z\s.&]/g,""); // results in "/"
RoToRa