Category:
developers journal
javascript
Non-breaking white space Internet Explorer 8 JavaScript regexp bug (and how to fix it)
While developing jQuery plugin for upcoming bookmarking “Items in select boxes” plugin for our Vudu CMS
I wrote a simple regexp to strip few characters (pipe, minus, apostrof and white-space) that are added before the actual item.
function cleanOptionText(txt) { return txt.replace(/^[\s|'-]+/, ''); };
It worked just fine on FF9 and Chrome but in IE8 only the first pipe (|) was removed. After some debugging I discovered that I have both spaces and non-breaking spaces that should be removed and that in IE8 class shorthand \s
(which should include all white space) doesn’t include non-breaking space.
Code for non-breaking space is 0xa0 (dec 160) so regexp should be updated as follows:
function cleanOptionText(txt) { return txt.replace(/^[\s\xA0|'-]+/, ''); };
Also we took opportunity to update our javascript trim functions:
String.prototype.trim = function() { return this.replace(/^[\s\xA0]+|[\s\xA0]+$/g,""); } String.prototype.ltrim = function() { return this.replace(/^[\s\xA0]+/g,""); } String.prototype.rtrim = function() { return this.replace(/[\s\xA0]+$/g,""); }
Here is complete html test file:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>nbsp test</title> </head> <body> <form action="#"> <fieldset> <select id="testselect"> <option value="1"> Some option</option> </select> </fieldset> </form> <script type="text/javascript"> /*<![CDATA[*/ var txt=document.getElementById('testselect').options[0].text; var analyizeTxt=''; var l=txt.length; for(var i=0; i<l; i++) { analyizeTxt+= '[ ('+txt.charCodeAt(i)+')=('+txt.charAt(i)+')]'; } alert(analyizeTxt); var newTxt1 = txt.replace(/^\s+/, ''); alert('Using only \\s = ('+newTxt1+')'); var newTxt2 = txt.replace(/^[\s\xA0]+/, ''); alert('Using \\s and \\xA0= ('+newTxt2+')'); /*]]>*/ </script> </body> </html>
One thought on “Non-breaking white space Internet Explorer 8 JavaScript regexp bug (and how to fix it)”
March 12, 2014 at 17:32
Thank You!