我在我的应用中使用Facebook API进行用户身份验证,然后将用户数据保存到数据库中。我正在为我的应用程序使用相同的(即facebook)用户名,如果它存在,我使用名称创建用户名,但问题是某些用户没有英文显示名称。那么如何在服务器端检查这样的输入呢?
我的应用是用Asp.net编写的。
答案 0 :(得分:5)
您可以使用正则表达式检查字符是否仅为a, b, c...z
或A, B, C...Z
:
using System.Text.RegularExpressions;
Regex rgx = new Regex("^[a-zA-Z]+$");
if (rgx.IsMatch(inputData))
// input data is in English alphabet; take appropriate action...
else
// input data is not in English alphabet; take appropriate action...
答案 1 :(得分:1)
这项任务可能有些过分,但检测输入语言的正确方法是使用Extended Linguistic Services APIs或Free Language Detection API等服务
在您的情况下,我建议以适当的编码保存用户名(例如utf-8
或utf-16
,这应该适用于Facebook上的用户名)
答案 2 :(得分:0)
您的问题不是用户名是外语,而是您尝试将数据存储到数据库而不使用适当的字符编码(这是我见过???
的唯一原因当字符编码至少是当前问题的一个级别时)。
在最低,你应该使用utf-8
,但如果你真的很保守,你可能想要使用utf-16
(甚至是utf-32
)。我还推荐这个mandatory reading。
确定用户名是否为英文是不可能的。专有名词上有太多可能的变体,无法提供任何可靠的指标。然后有移植的名字等。您可以尝试检测是否存在非ASCII字符(我相信/[^ -~]/
应该匹配所有字符 - 空格是ASCII中最低的“可键入”字符,〜是最高的字符),但是您正在补偿unicode问题,而不是让计算机优雅地处理。