如何从号码中取出电话分机并将其放在单独的列中

时间:2014-07-02 14:50:32

标签: php validation explode trim

我目前正在使用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位数,删除尾随扩展名。我只需要弄清楚如何编写后者。有关如何改进我当前代码或添加新代码的任何输入将不胜感激。

1 个答案:

答案 0 :(得分:0)

您处理电话号码的方式会有所不同,具体取决于您开始使用的内容以及您最终想要的内容。

解决这类问题的一个好策略是“分而治之”。

将您的数据划分为两组 - 例如,那些具有扩展名和数组的人。那些没有。

拿带有扩展名的那些并进一步划分,比如像“8005551212x100”这样的组(即用'x'表示扩展名)等等。现在您知道如何处理第一个组 - 将字符串拆分为“x”,将电话号码放入数据库中的一列,将扩展名放入另一列中。现在你有了更多的电话号码(可能有各种格式),但扩展已经得到了解决。

处理电话号码的方法包括:

  1. explode - 适用于使用明确定义的分隔符分隔字符串。例如。 explode("x", "8005551212x100") == array("8005551212", "100")

  2. substr - 适用于特定信息出现在字符串中特定位置的字符串。例如。 substr("8005551212",3,3) == "555"

  3. 正则表达式 - 可以适用于可变数据。例如。对于电话号码,其中扩展名由“x”或“ext”或“extension”分隔:preg_match("/^[0-9]+(x|ext|extension)[0-9]+$/", "8005551212ext100")。但是要小心,要抵制写一个覆盖数据库中所有类型数字的正则表达式的诱惑 - 这可能是可能的,但是你会让自己疯狂地试图编写&调试一个疯狂的长正则表达式。这就是为什么我建议将您的数据分成相似格式的组。