потому что после первой проверки находит точку и смещает индекс, ищет дальше, а дальше точек нету)) как не находит ничего сбрасывает индекс и по новой. У тебя же модификатор g.
var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g;
alert(re.test("..")); //true
alert(re.test("..")); //true
alert(re.test("..")); //false
alert(re.test("..")); //true
var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g;
re.lastIndex=0;
alert(re.test(".")); //true
re.lastIndex=0;
alert(re.test(".")); //true
re.lastIndex=0;
alert(re.test(".")); //true
re.lastIndex=0;
alert(re.test(".")); //true
var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/;
alert(re.test(".")); //true
alert(re.test(".")); //true
alert(re.test(".")); //true
alert(re.test(".")); //true