Php 如何在此正则表达式中包含破折号

Php 如何在此正则表达式中包含破折号,php,regex,Php,Regex,这段代码取自codeigniter,我正试图将其复制到一个允许数字字符和破折号的新函数中。我需要向这个正则表达式添加什么才能同时允许破折号和括号 preg_match( '/^[\-+]?[0-9]*\.?[0-9]+$/', $str); 更新: preg_match( '/^\+?[-0-9()]*\.?[-0-9()]+$/', $str); 正则表达式的意思是: 以-或+开始这行 然后0-9零次或更多次 然后一个。大概 然后以以下数字中的至少一个结束:0-9 您需要指定希望正则表达式

这段代码取自codeigniter,我正试图将其复制到一个允许数字字符和破折号的新函数中。我需要向这个正则表达式添加什么才能同时允许破折号和括号

preg_match( '/^[\-+]?[0-9]*\.?[0-9]+$/', $str);
更新:

preg_match( '/^\+?[-0-9()]*\.?[-0-9()]+$/', $str);

正则表达式的意思是: 以-或+开始这行 然后0-9零次或更多次 然后一个。大概 然后以以下数字中的至少一个结束:0-9

您需要指定希望正则表达式执行的操作,然后有人可以编写正确的正则表达式

编辑 给你:

<?php

// 555-555-5555 or (555) 555-5555 or (555)555-5555
$str = '555-555-5555';
if (preg_match( '/^((\([0-9]{3}\)) ?|[0-9]{3}-)[0-9]{3}-[0-9]{4}$/', $str) == 1){
    echo 'Yes!';
}else{
    echo 'No!';
}
?>


我更新了问题,也允许使用括号。你能更新你的答案吗?更新。虽然不确定括号中的哪个位置需要输入电话号码,但一些
$str
的示例会让人震撼。我正在尝试允许用户以多种格式输入电话号码,包括
555-555-5555
(555)555-555
。最好使用这个
preg_match('/^\+?[-0-9()]+[0-9]+[0-9]{1}$/',trim($str)
。是否将它们添加到角色类?*有关一些有用的工具或更好的教程,请参见和。问题中发布的代码直接取自form_验证类中的codeigniter函数“Numeric”。我只是想给它加上破折号和括号,这样它们也可以使用。@Catfish,您标记为correct的答案允许
+-)(0
这看起来像任何人的电话号码吗?对于我的应用程序来说,这是可以的,因为我去掉除了数字以外的任何东西来将其插入数据库。这只是为了让人们可以输入多种格式。我猜它允许
+
-
,因为codeigniter
numeric
格式必须允许
-2
这样的数字>,
+2
等。
<?php

// 555-555-5555 or (555) 555-5555 or (555)555-5555
$str = '555-555-5555';
if (preg_match( '/^((\([0-9]{3}\)) ?|[0-9]{3}-)[0-9]{3}-[0-9]{4}$/', $str) == 1){
    echo 'Yes!';
}else{
    echo 'No!';
}
?>