2017-02-17 82 views
0

当我尝试通过正则表达式验证电子邮件时,我遇到了一个路障。尝试使用内置JavaScript .test()方法进行正则表达式测试时,出现未定义的函数错误。引用这些类型的函数时是否使用某种特殊关键字?在反应本地调用js函数

谢谢!我感谢你的意见。

这些是导致问题的两段代码。

class LoginForm extends Component { 

state = { email: '', password: '', warning: '', loading: false, color:  '#FFFFFF' }; 

    onButtonPress() { 
     const { email, password } = this.state; 

    this.setState({ loading: true }); 
    this.setState({ warning: '' }); 

    if (this.verifyEmail(email)) { 
    firebase.auth().signInWithEmailAndPassword(email, password) 
    .then(this.onLoginSuccess.bind(this)) 
    .catch(() => { 
     firebase.auth().createUserWithEmailAndPassword(email, password) 
     .then(this.onLoginSuccess.bind(this)) 
     .catch(this.onLoginFail.bind(this)); 
    }); 
    } 
    else { 
    this.onLoginFail.bind(this); 
    } 
} 

    verifyEmail = (email) => { 
    const regex = '^[a-zA-Z0-9_.+-][email protected](?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)? (gmail)\.com$'; 
    return regex.test(email); 
    } 
+0

你似乎是试图调用['RegExp.prototype.test'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Reference/Global_Objects/RegExp/test)。尝试将您的字符串转换为实际的RegExp – Hamms

+0

Yeap,这很有道理。我在一段时间里并没有和js混淆。谢谢! – Gabe

回答

0

您正则表达式只是一个字符串,但不是真正的正则表达式,你应该建立一个像这样的正则表达式:

verifyEmail = (email) => { 
    const regex = /^[a-zA-Z0-9_.+-][email protected](?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)? (gmail)\.com$/; 
    return regex.test(email); 
} 

正则表达式经常重复使用。所以我建议你这样做:

const regex = /^[a-zA-Z0-9_.+-][email protected](?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)? (gmail)\.com$/; 

var verifyEmail = (email) => { 
    return regex.test(email); 
} 
+0

请解释你的答案,而不是只是倾销代码片段。 –

+0

这是做了诡计,出于某种原因,我记得过去不得不使用引号。谢谢! – Gabe

+0

你可以像这样创建一个正则表达式: var regex = new Regex('^ [a-zA-Z0-9 _。+ - ] + @(?:(?:[a-zA-Z0-9- ] + \。)?[a-zA-Z] + \。)?(gmail)\。com $') –