在浏览器控制台中,以下函数的输出是一系列的alterante true和false。任何的想法?
function checkSpecificLanguage(text_val) { // Force string type`enter code here` var regex = /^[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\u2605-\u2606\u2190-\u2195u203B]+$/ig; console.log( text_val+"-"+regex.test(text_val) ); console.log( text_val+"-"+regex.test(text_val) ); console.log( text_val+"-"+regex.test(text_val) ); console.log( text_val+"-"+regex.test(text_val) ); console.log( text_val+"-"+regex.test(text_val) ); return regex.test(text_val); } checkSpecificLanguage("でしたコンサート");
答案 0 :(得分:3)
您正在使用全局(g
)标记。
根据MDN:
与
exec()
(或与之结合使用)一样,在同一个全局正则表达式实例上多次调用的test()
将超过上一个匹配。
您可以通过设置lastIndex
来解决此问题。
答案 1 :(得分:1)
由于您与g
一起使用的test
修饰符。
MDN:
在同一个全局正则表达式实例上多次调用的
test()
将超过上一个匹配。
每次之后使用regex.lastIndex = 0
来解决此问题。
如果您不需要多次匹配,请删除/g
修饰符。
function checkSpecificLanguage(text_val) {
var regex = /^[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\u2605-\u2606\u2190-\u2195u203B]+$/ig;
console.log( text_val+"-"+regex.test(text_val) );
regex.lastIndex = 0
console.log( text_val+"-"+regex.test(text_val) );
regex.lastIndex = 0
console.log( text_val+"-"+regex.test(text_val) );
regex.lastIndex = 0
console.log( text_val+"-"+regex.test(text_val) );
regex.lastIndex = 0
console.log( text_val+"-"+regex.test(text_val) );
return regex.test(text_val);
}
checkSpecificLanguage("でしたコンサート");