2

插入电话号码时,用户倾向于以各种方式输入,例如083-XXXXXXXor(083)XXXXXXXXXXXXXX。我的意思是分机和电话,有时只是电话。如何让preg_match()接受-XXX(XXX)退回真机?例如(083) 1234567将是1234567.

我使用了这种方法:

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

不过好像只能接受了083-。我希望它可以接受-083(083)

我怎样才能做到这一点?

4

3 回答 3

1

Here you are : $value = preg_replace('/^((?:\(\d+\)|\d+)[- ]?)?(\d+)$/', '$2', $value);

于 2013-09-22T07:04:55.503 回答
0

有这种模式:

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

将返回没有国家/省代码的电话号码。见演示

于 2013-09-22T11:58:15.030 回答
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 

完成的!

于 2013-09-22T12:39:51.987 回答