【发布时间】:2016-09-26 02:17:17
【问题描述】:
首先,我检查了可能的解决方案,但找不到有助于解决我的问题的方法。
简而言之,我有现有的逻辑,可以从用户那里获取电子邮件并测试少数条件,例如确保它没有撇号、双 @ 符号和连续点等。该逻辑不是使用正则表达式实现的。
现在,我有新要求,我们需要限制用户输入非英文字符,限制是指尝试在用户输入非英文字符时捕获它,或者在将值传递给验证其他字符的 javascript 函数时捕获它以上条件。
所以我在这里找到了一些答案并尝试了它们:here
这是我的代码:
<input type="text" id="ctEmailAddress" name="ctEmailAddress" autocomplete="off"
size="40" maxlength="255" value="${userinfo.emailAddress}" oncopy="return false;" onpaste="return false;" onkeypress="suppressNonEng(event)">
还有脚本:
function suppressNonEng(event){
var englishAlphabetAndWhiteSpace = /[A-Za-z ]/g;
var key = String.fromCharCode(event.which);
if (englishAlphabetAndWhiteSpace.test(key)) {
return true;
}
alert ("this is not in English");
return false;
}
所以我使用了来自链接的 js 函数,它与当前的逻辑是分开的。问题是,它仍然允许传递非英文字符,例如法语。
同样适用于这个函数:
function suppressNonEng(event){
var key = event.which;
if(key > 128){
alert("Email address can be entered only in English. Please try again.");
}
}
同样,法语字母通过它没有问题。
我的问题是,如何确保该值仅是英文字符?我应该为此使用正则表达式还是有更好的解决方案?请指教。谢谢。
【问题讨论】:
-
从正则表达式中删除
g修饰符,因为您将它与RegExp#test一起使用 -
为什么需要阻止这些非英文字符?这样的要求对我来说似乎很幼稚,我看不出你想用它实现什么。
-
@RaphaelMiedl 非英文字符导致我们的数据库出现问题,我要求高级开发人员限制输入非英文电子邮件。
-
请解释您的代码是如何工作的或提供fiddle
-
@Zhaiyk 如果非英文字符在您的数据库中引起问题,请更改字符集(例如,如果您使用的是 MySQL,则更改为
utf8)。除非您告诉我是您的公司为您的客户创建电子邮件地址,否则阻止非英文字符将大大减少您网站的潜在市场(毕竟,您不能指望客户创建一个新的电子邮件地址来订阅到您的网站)。
标签: javascript regex email email-validation