如何使preg_match接受 - 或()

时间:2013-09-22 06:53:04

标签: php regex preg-replace preg-match

当插入电话号码时,用户倾向于以083-XXXXXXX(083)XXXXXXXXXXXXXX等各种方式输入内容。我的意思是扩展和手机,有时只是电话。如何让preg_match()接受-XXX(XXX)然后返回真实手机?例如,(083) 1234567将为1234567

我使用了这种方法:

preg_match("/^[-0-9]{10,20}$/",$value); 
preg_replace("/(083-)/","",$value); 

但它似乎只接受083-。我希望它可以接受-083(083)

我该怎么做?

3 个答案:

答案 0 :(得分:1)

你在这里: $value = preg_replace('/^((?:\(\d+\)|\d+)[- ]?)?(\d+)$/', '$2', $value);

答案 1 :(得分:0)

有这种模式:

/(?:(?:\(\d+\))|(?:\d+-))(\d+)/g

将返回没有国家/省代码的电话号码。请参阅demo

答案 2 :(得分:0)

这种模式可行:

~^(\(\d+\)|\d+\-)?\d{10,20}$~

这是测试脚本:

<?php

$pattern = ''; // the regexp
$input = ''; // the phone number

$valid = preg_match($pattern, $input) ? 'valid' : 'INVALID';

echo 'The number is ' . $valid; // it prints out valid if phone number accepts prints out INVALID if phone number rejects
?>

我的模式:

~^(\(\d+\)|\d+\-)?\d{10,20}$~
嗯......我们来试试吧!

$pattern = '~^(\(\d+\)|\d+\-)?\d{10,20}$~';
$input = '(083)0123456789';

输出:The number is valid

下一个号码......

$input = '0123456789';

输出:The number is valid

下一步:

$input = '083-0123456789';

输出:The number is valid

让我们测试 INVALID 号码以确保其正常运行

$input = '083+0123456789';

输出:The number is INVALID

下一步:删除前缀

代码:

echo preg_replace('~(\(\d+\)|\d+\-)~', '', $input);
// input:(083)0123456789 , output: 0123456789
// input: 0123456789, output: 0123456789 
// input: 083-0123456789, output: 0123456789 

完成!