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