2010-09-18 91 views
0

我刚刚开发了一个简单的asp.net mvc应用程序项目,仅用于英语。我想阻止用户输入英语以外的语言。是否有可能知道当用户在文本框或编辑器上写入某些内容时用户是否输入了其他语言以提供弹出消息?字符/语言

+3

那么,英文中引用我的名字的文本将被禁止? – 2010-09-18 19:36:55

+0

不,那不是我的目的。我想在网站上使用英语作为官方语言,因为我们公司有许多不同的人说不同的语言。名字就像你的将被接受。 – Hoorayo 2010-09-18 19:57:57

+0

你打算检查/过滤/倾斜西里尔文,希伯来文,波斯文,阿拉伯文,普通话等的字符? – 2010-09-19 00:14:25

回答

3

你可以限制输入框拉丁字符,但没有自动的方法,如果用户输入中说一些英语,芬兰语或挪威。他们大都使用a-z。 a-z以外的任何字符都可以给你一个指示,但某些口音也需要用英语来表示,所以它不是100%。

Google Translate公开了一个JavaScript API来检测文本的语言。

0

检查拉美26

如果你想确保任何非英文字母被提交,你可以简单地验证他们属于A-Z,A-Z,0-9和正常标点范围之外。这听起来像你想要检测并拒绝普通的非拉丁字符。

检测用户的操作系统设置,键盘设置不是最好的方式,因为用户可以连接多个键盘,并使用复制/粘贴。

UI验证

在用户界面级别,你可以创建一个jQuery的方法,将检查一个文本框的值比你的可接受范围以外的值。也许这就是A-Z,a-z和数字。你可以在事件onBlur上做到这一点。请记住,你可能要允许'.

$('#customerName').blur(function() { 
    var isAlphaNumeric; 
    //implementation of checking a-z, A-Z, 0-9, etc. 
    alert(isAlphaNumeric); 
}); 

控制器验证

如果你想在控制器级别,也能实现这一点,你可以对输入值运行正则表达式。

public ActionMethod CreateCustomer(string custName) 
{ 
    if (IsAcceptableRange(custName)) 
    { 
     //continue 
    } 
} 

public bool IsAcceptableRange(string input) 
{ 
    //whitelist all the valid inputs here. be sure to include 
    //space, period, apostrophe, hypen, etc 
    Regex alphaNumericPattern=new Regex("[^a-zA-Z0-9]"); 
    return !alphaNumericPattern.IsMatch(input); 
} 
+1

它不会识别语言,只是您输入的英文字母中的字符也是许多其他语言共享的字符。 – 2010-09-18 19:39:42

+0

@Mikael:同意。斯文,吉尔斯等将通过这项测试。它只会过滤掉非拉丁文的26个字符。 – 2010-09-18 19:44:48

+0

这意味着我无法输入标点符号?甚至空间? – 2010-09-18 20:28:00

0

有两个测试你可以做。一个是找出CultureInfo的设置用户的机器上:

http://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture.aspx

这会给你他们目前的文化背景,这是一个开始。当然,你可以有你的设置为“英语”,但俄罗斯依然打字,大部分信件是一样的..

所以下一步是使用此发现的语言:http://www.google.com/uds/samples/language/detect.html

根据在线讨论,这不是最大的,但它是一个开始的地方。不过,我确信那里有更好的自然语言标识符。

3

使用下面的代码:

<p>Note that this community uses the English language exclusively, so please be 
considerate and write your posts in English. Thank you!</p> 
+0

我同意你的意见。这是我要做的第一件事,但不幸的是用户从来不会注意阅读这种警告。 – Hoorayo 2010-09-18 19:48:22

+1

@Hoorayo:StackOverflow没有这样的警告(或者如果是这样,它从来没有引起我的注意),但大多数(如果不是全部)问题和答案都是英文的。所以,它可以没有工作。你只需要弄清楚如何。 :-) – dtb 2010-09-18 20:27:49

0

谷歌翻译被引述在两个答案,但我想补充一点,的Microsoft Word API也可以用于检测语言,就像字确实为拼写检查。

这肯定不是最好的解决方案,因为Microsoft Office的语言检测功能不能很好地工作(恕我直言),但如果在每个发布的消息上向Google或其他远程服务发出网络请求不是很好一个办法。

另外,通过Microsoft Word API检查拼写也可能有用。如果一封邮件在用英文检查时有大量拼写错误的单词,可能是因为邮件是用另一种语言编写的(或者邮件的编写者写得太糟糕了)。

最后,我完全同意Matti Virkkunen。最好的,也许唯一的方法来确保消息将用英文写成要求用户用英文写作。否则,它与实施obscenity filters一样糟糕。