I need a regular expression that will match any character that is not a letter or a number. Once found I want to replace it with a blank space.
10 Answers
To match anything other than letter or number you could try this:
[^a-zA-Z0-9]
And to replace:
var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');

- 1,023,142
- 271
- 3,287
- 2,928
-
25`\w` is for Word characters and is exactly the same as `[a-zA-Z0-9_]` (notice that underscore is considered a word character.) ...so the shorthand would be `str.replace(/[^\w]/g, ' ')` – Joel Mellon Aug 30 '13 at 16:41
-
but it will include many unicode letters, too! is there any way to exclude unicode letters? – Clite Tailor May 04 '17 at 12:06
-
2To include unicode characters, you can use [^\p{L}0-9] – Dave Aug 09 '17 at 21:29
-
1@Dave: As of 2018 you can't without a polyfill, apparently... https://stackoverflow.com/questions/280712/javascript-unicode-regexes – Nickolay Jun 07 '18 at 16:39
-
is there a way, instead of repalce with a space... replace with "\" followed by the character that was been identified? Like this: make this dfj,dsf7lfsd .sdklfj into this dfj\,dsf7lfsd \.sdklfj? – CrazySpy Nov 26 '19 at 13:52
This regular expression matches anything that isn't a letter, digit, or an underscore (_
) character.
\W
For example in JavaScript:
"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: " asdf 345345"

- 14,854
- 11
- 100
- 103

- 856
- 5
- 6
-
I believe he is looking for /(_|\W)/g, to match anything not a digit or letter (english language) – kennebec Jun 07 '10 at 18:44
-
@sbmaxx I want to replace all except &, (, ) these characters. how could i add this condition in the current regex. – Kunal Pal Feb 21 '19 at 11:24
You are looking for:
var yourVar = '1324567890abc§$)%';
yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' ');
This replaces all non-alphanumeric characters with a space.
The "g" on the end replaces all occurrences.
Instead of specifying a-z (lowercase) and A-Z (uppercase) you can also use the in-case-sensitive option: /[^a-z0-9]/gi
.

- 3,538
- 1
- 27
- 34

- 5,426
- 9
- 42
- 61
-
-
Space characters would match, but then would be replaced by space characters, so in effect it would leave them alone (a space will stay a space). – jimbo Jun 07 '10 at 18:42
This is way way too late, but since there is no accepted answer I'd like to provide what I think is the simplest one: \D - matches all non digit characters.
var x = "123 235-25%";
x.replace(/\D/g, '');
Results in x: "12323525"
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

- 566
- 4
- 13
- Match letters only
/[A-Z]/ig
- Match anything not letters
/[^A-Z]/ig
- Match number only
/[0-9]/g
or/\d+/g
- Match anything not number
/[^0-9]/g
or/\D+/g
- Match anything not number or letter
/[^A-Z0-9]/ig
There are other possible patterns

- 1,445
- 10
- 21
Just for others to see:
someString.replaceAll("([^\\p{L}\\p{N}])", " ");
will remove any non-letter and non-number unicode characters.

- 53
- 2
- 4
-
I'm not sure where the two upvotes came from, but in JavaScript (which this question is about) there's no `replaceAll`, and the `\p{..}` property escapes are not widely implemented. – Nickolay Jun 07 '18 at 16:43
-
1
try doing str.replace(/[^\w]/); It will replace all the non-alphabets and numbers from your string!
Edit 1: str.replace(/[^\w]/g, ' ')

- 359
- 4
- 11
-
2A working answer would be `str.replace(/[^\w]/g, ' ')`. If you don't include `/g` flag it will only replace the first occurence. And if you don't define a replacement string, here a blank space `' '`, it will replace by `undefined` all over the place. Finally, underscores will not be replaced because they match `\w`. This answer is not a perfect fit. – Julien Lirochon Feb 18 '17 at 17:25
Have you tried str = str.replace(/\W|_/g,'');
it will return a string without any character and you can specify if any especial character after the pipe bar |
to catch them as well.
var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, '');
it will return str = 1324567890abcJohnDoe
or look for digits and letters and replace them for empty string (""):
var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, '');
it will return str = '§$)% #$@';

- 603
- 7
- 15
Working with unicode, best for me:
text.replace(/[^\p{L}\p{N}]+/gu, ' ');

- 1,572
- 17
- 20