如果数字与带有连字符,加号,空格或括号的任何数字都不匹配,我想显示错误消息。没有数字。
例如:
(012) 123 4567
(012)-123-4567
012-345-6789
123 123 1234
+12 23 213 3456
以上示例均适用于此表达式:
if (!preg_match("/^[0-9\-]|[\+0-9]|[0-9\s]|[0-9()]*$/", $_POST['tel'])) {
$telErr = "Invalid contact number";
}
但它允许我不想要的信件。
示例:
+00000000a
上面的例子被我所拥有的表达所接受。
请有人帮我这个。
答案 0 :(得分:1)
此表达式将接受+ 5number,5number
"'^(([\+]([\d]{2,}))([0-9\.\-\/\s]{5,})|([0-9\.\-\/\s]{5,}))*$'"
答案 1 :(得分:0)
更好的正则表达式是:
"/^[\+0-9\-\(\)\s]*$/"
答案 2 :(得分:0)
我首先清理一下字符串(避免无用的匹配):
$input = preg_replace('/[^0-9+\(\)-]/', '', $_POST['tel']);
我匹配美国数字+1(xxx)xxx-xxxx;
if(preg_match('/^(\+1|001)?\(?([0-9]{3})\)?([ .-]?)([0-9]{3})([ .-]?)([0-9]{4})/',$input))
$result = "match: USA";
else $result = "no match";
这允许相当多的输入配置 - 只有你的最后一个数字不匹配(如果我不首先进行清理,不是因为匹配的国际代码,而是因为区域中的分割 - 代码)所有其他人也没有清理。
答案 3 :(得分:0)
在我看来,您想表达的是以下内容:
\+{0,1}\({0,1}[0-9]{0,3}\){0,1}[ -]{0,1}[0-9]{0,4}[ -]{0,1}[0-9]{0,4}[ -]{0,1}[0-9]{0,4}
可以简化为:
(\+?\(?[0-9]{2,3}\)?)([ -]?[0-9]{2,4}){3}
可以这样写:
\+? //matches existence of +
\(? //matches existence of (
[0-9]{2,3} //matches 2 to 3 numbers
\)? //matches existence of )
([ -]?[0-9]{2,4}){3} //matches a space or a dash with 2 to 4 numbers, 3 times.
这将最多为您提供3 + 4 * 3 = 15个数字,电话变量不带空格。
但是我认为最好的方法是修剪输入,然后计算输入的长度。
在RegEx中,总是有一个完美的匹配答案,但这并不总是意味着使用它是一个好主意。维护起来可能太复杂,也很难理解。
答案 4 :(得分:0)
西班牙 - 西班牙
preg_match("/^(\+34|0034|34)?[6|7|9][0-9]{8}$/", $phone);
葡萄牙 - 太平洋
preg_match("/^(\+351|00351|351)?[2|9][0-9]{8}$/", $phone);
安道尔 - 广告
preg_match("/^(\+376|00376|376)?[0-9]{6}$/", $phone);
直布罗陀 - GI
preg_match("/^(\+350|00350|350)?[0-9]{8}$/", $phone);
-- 拥有所有国家/地区列表会很棒