Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使preg_匹配接受-或()_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

Php 如何使preg_匹配接受-或()

Php 如何使preg_匹配接受-或(),php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,插入电话号码时,用户倾向于以各种方式键入,如083-XXXXXXX或(083)XXXXXXX或XXXXXXX。我指的是分机和电话,有时只是电话。如何使preg_match()接受-XXX或(XXX)然后返回真实手机?例如,(083)1234567将是1234567 我用了这个方法: preg_match("/^[-0-9]{10,20}$/",$value); preg_replace("/(083-)/","",$value); 但它似乎只接受083-。我希望它可以接受-083或(083

插入电话号码时,用户倾向于以各种方式键入,如
083-XXXXXXX
(083)XXXXXXX
XXXXXXX
。我指的是分机和电话,有时只是电话。如何使
preg_match()
接受
-XXX
(XXX)
然后返回真实手机?例如,
(083)1234567
将是
1234567

我用了这个方法:

preg_match("/^[-0-9]{10,20}$/",$value); 
preg_replace("/(083-)/","",$value); 
但它似乎只接受
083-
。我希望它可以接受
-083
(083)

我该怎么做呢?

给你:
$value=preg\u replace('/^((?:\(\d+\)\d+[-]?)?(\d+$/','$2',$value)

具有此模式:

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

将返回不带国家/省代码的电话号码。请参阅。

此模式将起作用:

~^(\(\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
?>
嗯。。。让我们测试一下

$pattern = '~^(\(\d+\)|\d+\-)?\d{10,20}$~';
$input = '(083)0123456789';
输出:
数字有效

下一个号码

$input = '0123456789';
输出:
数字有效

下一步:

输出:
数字有效

让我们测试一个无效的数字,以确保它正常工作

$input = '083+0123456789';
输出:
号码无效

下一步:删除前缀

代码:


完了

你尝试过什么吗?我使用了这个方法preg_match(“/^[-0-9]{10,20}$/”,$value);preg_替换(“/(083-/”,“”,$value);但它似乎只接受083-。我希望它可以接受-083或(083),只需处理字符串以删除非数字字符,然后读取其余字符(如果需要,请删除083)。@AnNguyễnLêThái现在看来你的问题更有意义了:)为什么不替换(“/\D+/”,“,$value”)
首先删除所有非数字?这确实很有帮助,但您能解释一下“~”字符的含义吗。我有点困惑“~”没有什么特别的意思。它只是一个像“/”一样的分隔符。附言:你可以投赞成票,而不是说这很有帮助!:)
$input = '083-0123456789';
$input = '083+0123456789';
echo preg_replace('~(\(\d+\)|\d+\-)~', '', $input);
// input:(083)0123456789 , output: 0123456789
// input: 0123456789, output: 0123456789 
// input: 083-0123456789, output: 0123456789