我一直在尝试使用正则表达式来评估字符串,但是我注意到了一种奇怪的行为,当我用正则表达式多次测试时.测试方法在true和false之间交替.检查此编码器 - > http://codepen.io/gpincheiraa/pen/BoXrEz?editors=001
var emailRegex = /^([a-zA-Z0-9_\.\-]){0,100}\@(([a-zA-Z0-9\-]){0,100}\.)+([a-zA-Z0-9]{2,4})+$/,
phoneChileanRegex = /^\+56\S*\s*9\S*\s*\d{8}(?!\@\w+)/g,
number = "+56982249953";
if(!number.match(phoneChileanRegex) && !number.match(emailRegex) ) {
console.log("it's not a phone number or email address");
}
//Weird Behaviour
console.log(phoneChileanRegex.test(number)); --> true
console.log(phoneChileanRegex.test(number)); --> false
Run Code Online (Sandbox Code Playgroud)
这是因为该test方法与许多RegExp方法一样,在与g标志一起使用时会尝试在同一个字符串中查找多个匹配项.为此,它会跟踪它应该在RegExp lastIndex属性中搜索的位置.如果您不需要找到多个匹配项,请不要放置g标记.如果您想要使用它,只需记住regex.lastIndex在想要测试新字符串时设置为0.