我有来自任何国家/地区的电话号码列表(字符串)。
例如:
foreach (var item in items)
{
int countryCode = 0;
var number = "";
if (item.StartsWith("+"))
{
countryCode = int.Parse(item.Substring(1, 2));
number = item.Substring(3);
}
else if (item.StartsWith("00"))
{
countryCode = int.Parse(item.Substring(2, 2));
number = item.Substring(4);
}
var regCode = phoneUtil.GetRegionCodeForCountryCode(countryCode);
var numberWithRegCode = phoneUtil.Parse(number, regCode);
if (!phoneUtil.IsValidNumber(numberWithRegCode)) continue;
//else ...
}
使用 libphonenumber 库,您必须通过regCode进行解析。因为(在我的场景中)我得到字符串列表(手机号码),那么我必须是单独的国家代码和号码。
package main
import (
"encoding/xml"
"fmt"
)
type Member struct {
Name []Names `xml:"names"`
Value string `xml:"value>string"`
}
type Names struct {
Name string `xml:"name"`
}
type Result struct {
Members []Member `xml:"params>param>value>array>data>value>struct>member"`
}
func main() {
data := `
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<string>12345abcde12345abcde12345</string>
</value>
<value>
<struct>
<member>
<names>
<name> 2 </name>
<name> 3 </name>
<name> 4 </name>
</names>
<value>
<string>trex</string>
</value>
</member>
<member>
<names>
<name> 2 </name>
<name> 3 </name>
<name> 4 </name>
</names>
<value>
<string>trex</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>`
v := Result{}
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
}
这段代码只适用于国家代码,它们的长度是两个数字!
但过了一会儿,我知道一些国家代码长度是一个数字(例如,美国:1),甚至是三个数字!。
现在,是否存在使用 libphonenumber 库(或其他解决方案)解决此问题的方法?
非常感谢
答案 0 :(得分:3)
只要数字以+开头,libphonenumber库就可以自己查找国家/地区代码。因此,只需在数字的开头用加号替换双零。然后让图书馆自行决定该号码是否有效。
libphonenumber将自己知道哪个是加号后面的国家代码(它内部有一个所有代码的列表),然后根据正确的国家/地区应用规则来决定该数字是否有效。
bool IsValidNumber(string aNumber)
{
bool result = false;
aNumber = aNumber.Trim();
if (aNumber.StartsWith("00"))
{
// Replace 00 at beginning with +
aNumber = "+" + aNumber.Remove(0, 2);
}
try
{
result = PhoneNumberUtil.Instance.Parse(aNumber, "").IsValidNumber;
}
catch
{
// Exception means is no valid number
}
return result;
}
答案 1 :(得分:-1)