我有一个字符串,需要验证它是否是一个国家代码。文化背景是德国。有没有一种方法可以调用以获取在德国文化背景下的国家代码列表,而无需自己手动输入所有274个代码?
谢谢, Teja。
我有一个字符串,需要验证它是否是一个国家代码。文化背景是德国。有没有一种方法可以调用以获取在德国文化背景下的国家代码列表,而无需自己手动输入所有274个代码?
谢谢, Teja。
当您说“国家代码”时,我假设您指的是ISO 3166中的两个字母编码。然后,您可以使用RegionInfo构造函数来检查您的字符串是否为正确的代码。
string countryCode = "de";
try {
RegionInfo info = new RegionInfo(countryCode);
}
catch (ArgumentException argEx)
{
// The code was not a valid country code
}
正如您在问题中所述,您也可以检查它是否是德语的有效国家代码。然后,您只需将特定的区域设置名称与国家/地区代码一起传递即可。
string language = "de";
string countryCode = "de";
try {
RegionInfo info = new RegionInfo(string.Format("{0}-{1}", language, countryCode));
}
catch (ArgumentException argEx)
{
// The code was not a valid country code for the specified language
}
接受的答案误用了构造函数抛出的ArgumentException
。您实际上没有使用RegionInfo
或ArgumentException
实例,这使得代码的目的非常不清晰。
相反地,获取所有特定文化的列表,然后通过这些文化的区域搜索以找到与您的ISO 3166 alpha-2代码匹配的内容:
bool IsCountryCodeValid(string countryCode)
{
return CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Select(culture => new RegionInfo(culture.LCID))
.Any(region => region.TwoLetterISORegionName == countryCode);
}
或者更具体地说,针对您的问题:
bool IsValidGermanCountryCode(string countryCode)
{
return CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Where(culture => culture.TwoLetterISOLanguageName == "de")
.Select(culture => new RegionInfo(culture.LCID))
.Any(region => region.TwoLetterISORegionName == countryCode);
}
RegionInfo
检查有效的ISO代码时要小心。如果您提供的代码有效且是支持的地区,则它将返回一个地区,但它不会对所有有效的ISO 3166代码执行此操作。RegionInfo
在欧洲工作得很好,但有几个非洲国家无法使用此方法进行验证(例如乌干达)。Nager.Country
。每个国家都有很多额外的信息可用。有关更多信息,请访问Github项目。PM> install-package Nager.Country
var countryCode = "de";
ICountryProvider countryProvider = new CountryProvider();
var countryInfo = countryProvider.GetCountry(countryCode);
if (countryInfo != null)
{
//country exists
}