Please take a look at the following JavaScript. I've taken stuff out of it, so you may focus on the essence of the problem.
You'll notice that I call the prepPath function twice in a row, passing in the exact same string. In firefox and IE8, this function alerts true each time (as expected). But, in Chromium 5.0.375.127 (55887) Ubuntu 10.04, the function returns true the first time, and false the 2nd call, despite the input remaining exactly the same!
<script type="text/javascript">
function prepPath(str)
{
var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
if(regX.test(str))
{
alert("true: " + str);
}
else
{
alert("false; " + str);
}
}
prepPath("/desktop"); // alerts: true
prepPath("/desktop"); // alerts: false
</script>
Why is it returning false the second time in Chromium?
There's some ambiguity in the spec about when literal regexes should get reset (recall that they have state). You can work around this by doing this:
var regX = new RegExp(/[^\s/"'\\].*[^\s/"'\\]/g);
live example: http://jsbin.com/irate
or this:
var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
regX.lastIndex = 0;
live example: http://jsbin.com/irate/2
I'm informed by those who've looked into it more than I have that it's not actually an outright bug, but an ambiguity. And it's not just Chrome, some versions of other browsers have also had a similar problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With