[英]MeteorJS email form validation
这里总新手。 我正在尝试对订阅的新闻稿表单进行客户端表单验证。 我的客户端代码是这样的。
Template.body.events({
"submit .new-subscriber": function (event) {
// This function is called when the new task form is submitted
var newEmail = event.target.newEmail.value;
if (newEmail is email?){
Meteor.call("addNewSubscriber", newEmail);
}
我不确定如何在这里执行表单验证? 我可以执行相同的服务器端吗?
我们目前在Edthena使用两种不同的方法进行电子邮件验证,具体取决于具体情况。 希望这些之一或两者都可以满足您的需求。
正则表达式可用于快速而肮脏的电子邮件验证。 他们会抓住任何明显虚假的电子邮件,如x@yz
或foo@bar
,但这是关于他们准确性的限制。 当现有用户没有动机输入无效地址时,我们会在客户端的应用程序内部使用这些地址。 这是一个例子:
var isEmailValid = function(address) {
return /^[A-Z0-9'.1234z_%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(address);
};
在您的情况下,您可以在提交处理程序中添加对isEmailValid
的调用。 如果函数返回false
,则可能会显示错误,而不是调用addNewSubscriber
。
您可以在此处阅读有关电子邮件正则表达式的更多信息。
如果您认为用户可以故意输入无效地址,您可以带出大枪并调用mailgun电子邮件验证API 。 这种交易速度(结果可能需要几秒钟才能恢复)以显着提高准确性(mailgun可以检查目标域上是否存在MX记录)。 我们在面向公众的表单中使用这种方法。
Meteor.methods({
isEmailValid: function(address) {
check(address, String);
// modify this with your key
var result = HTTP.get('https://api.mailgun.net/v2/address/validate', {
auth: 'api:pubkey-XXXXXXXXXXXXX',
params: {address: address.trim()}
});
if (result.statusCode === 200) {
// is_valid is the boolean we are looking for
return result.data.is_valid;
} else {
// the api request failed (maybe the service is down)
// consider giving the user the benefit of the doubt and return true
return true;
}
}
});
在此示例中, isEmailValid
是作为方法实现的,可以根据您的需要在服务器或客户端上调用。 请注意,您将需要获取API密钥,并使用meteor add http
将http
包添加到您的应用程序中。
有关更多详细信息,请参阅文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.