我目前正在使用Oracle数据库尝试验证PHP代码中的电话号码。我有一栏" PHONE 1"包含一个字符串电话号码。此电话号码可能包含一个主要国家代码" 1"或者是一个尾随的电话分机(通常是4位数)。我需要PHONE 1只包含10位数的电话号码,然后如果它有国家代码或扩展名,我需要删除它们并将它们存储在我的Oracle数据库中当前为空的单独列中(" PHONE 1 COUNTRY CODE& #34;和#34; PHONE 1 EXTENSION")。我找到了一种方法来删除前导国家代码,但我不知道如何删除尾随扩展名。我调查了可能使用explode()函数,但无法弄明白。这是我用来删除前导1:
的代码while($row=oci_fetch_array($array, OCI_ASSOC+OCI_RETURN_NULLS)){
//VALIDATE PHONE NUMBERS AND COUNTRY CODES
if(isset($row["PHONE 1"])){
if (strlen($row["PHONE 1"])>10){
$row["PHONE 1"] = preg_replace("/^1/", '',$row["PHONE 1"]);
$row["PHONE 1 COUNTRY CODE"]="1";
if(strlen($row["PHONE 1"])>10){
//insert code here that will remove the extension and add it to the column $row["PHONE 1 COUNTRY CODE"]
}
}
}
我认为使用在另一个中添加第二个if语句将是删除扩展名的最简单方法。基本上,这应该说如果有超过10位数,删除前导1,然后如果仍有超过10位数,删除尾随扩展名。我只需要弄清楚如何编写后者。有关如何改进我当前代码或添加新代码的任何输入将不胜感激。
答案 0 :(得分:0)
您处理电话号码的方式会有所不同,具体取决于您开始使用的内容以及您最终想要的内容。
解决这类问题的一个好策略是“分而治之”。
将您的数据划分为两组 - 例如,那些具有扩展名和数组的人。那些没有。
拿带有扩展名的那些并进一步划分,比如像“8005551212x100”这样的组(即用'x'表示扩展名)等等。现在您知道如何处理第一个组 - 将字符串拆分为“x”,将电话号码放入数据库中的一列,将扩展名放入另一列中。现在你有了更多的电话号码(可能有各种格式),但扩展已经得到了解决。
处理电话号码的方法包括:
explode
- 适用于使用明确定义的分隔符分隔字符串。例如。 explode("x", "8005551212x100") == array("8005551212", "100")
substr
- 适用于特定信息出现在字符串中特定位置的字符串。例如。 substr("8005551212",3,3) == "555"
正则表达式 - 可以适用于可变数据。例如。对于电话号码,其中扩展名由“x”或“ext”或“extension”分隔:preg_match("/^[0-9]+(x|ext|extension)[0-9]+$/", "8005551212ext100")
。但是要小心,要抵制写一个覆盖数据库中所有类型数字的正则表达式的诱惑 - 这可能是可能的,但是你会让自己疯狂地试图编写&调试一个疯狂的长正则表达式。这就是为什么我建议将您的数据分成相似格式的组。