gpt4 book ai didi

php - 格式化电话号码(如果缺少,请检测并添加国家代码)

转载 作者:行者123 更新时间:2023-12-03 23:07:51 24 4
gpt4 key购买 nike

我有以下正则表达式查询,我构建的想法是获取用户输入(电话号码),然后确保所有数字在我将其存储在数据库中时都是完全相同的格式。

我遇到的问题是我的这个正则表达式不能满足所有场景,我稍后会解释。

这是我当前的代码:

//format phone numbers
function Number_SA($number)
{
//strip out everything but numbers
$number = preg_replace("/[^0-9]/", "", $number);
//Strip out leading zeros:
$number = ltrim($number, '0');
//The default country code
$default_country_code = '+27';
//Check if the number doesn't already start with the correct dialling code:
if ( !preg_match('/^[+]'.$default_country_code.'/', $number) ) {
$number = $default_country_code.$number;
}
//return the converted number:
return $number;
}

我想要的行为如下;如果用户输入以下任何一种格式,数字最终应为 +27

  • 797734809 #missing a leading 0
  • 0797734809
  • 27797734809
  • +27797734809

应全部转换为:

  • +27797734809

PS:我首先用这个清理输入的数字:

function clean_input($data) 
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

然后我对数字使用 Number_SA($number) 函数。换句话说:

$number = clean_input($_POST["cell_number"]);
$msisdn = Number_SA($number);

PPS:Number_SA,SA 代表南非,因为我住在那里,我希望它适用于我们的国家代码 +27

解决方案,我将 @Kamil Kiełczewski 的答案构建到我的程序中,如下所示:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST["cell_numbers"])) {
$err = "Please add numbers!";
} else {
$numbers = test_input($_POST["cell_numbers"]);
$numbers = explode("\n", str_replace("\r", "", $numbers));
foreach ($numbers as $number) {
$msisdn = preg_replace('/^(?:\+27|27|0)?/','+27', $number);
//insert into the database
}
}
}

最佳答案

这是你的正则表达式:

^(?:\+27|27|0)?(\d*)

如果它匹配某些东西,使用这个:+27$1

这是工作示例(改进):https://regex101.com/r/VaUAKN/7

解释:

首先我们想用数字拆分前缀(如果存在):^(?:\+27|27|0)? ?: 组内的前缀组将在结果中被忽略。 ^ 表示行的开始。最后一个 ? 允许前缀不存在。最后 (\d*) 在前缀之后捕获数字

PHP working example(Wiktor Stribiżew 指出在正则表达式中我们可以省略 (\d*)$1 并更改 \+27|27\+?27 ):

$numOld = "2712345678";
$num = preg_replace('/^(?:\+?27|0)?/','+27', $numOld); // > $num = "+2712345678"

关于php - 格式化电话号码(如果缺少,请检测并添加国家代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52815213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com