2012-11-02 20 views
0

我只是专门针对数字,所以如果我在使用前端过滤用户输入到(000)000-000,基本上[2-9]和[0-9]作为掩码(jquery.maskedinput-1.3.js) )和移动过滤器...如果0-9的所有数值都与字符串中的其他字符匹配,如何返回false?

jQuery(function ($e) { 
var isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/); 
$e('#refer').val(window.location.href); 

if (!(isMobile)) {  
    $e('#phone').mask('(299)299-9999'); 
    $e('#field_phone_number').mask('299-299-9999'); 
} 
}); 

对于服务器端的我在PHP作为正则表达式(没有什么特别的还)

function phonenumber($value) 
{ 
    return preg_match("/\(?\b[(. ]?[0-9]{3}\)?[). ]?[0-9]{3}[-. ]?[0-9]{4}\b/i", $value); 
} 

如何才能创建一个正则表达式或PHP脚本,针对所有数值值而不会为每个角色创建很长的正则表达式?我只想知道是否有人输入(222)222-2222,他们在回报中得到一个错误。

+0

你可以删除所有非数字字符,然后比较字符串'2222222222'而不是比较'(222)222-2222'。 – clentfort

+0

对不起,但我不明白,正则表达式必须承认(XXX)XXX-XXXX,其中X在0和9之间? – LSerni

+0

@clentfort我们想要保存字符,验证返回false,用户有机会纠正它们提交不正确。所以我不想剥离,然后取代。 – Shane

回答

2
function phonenumber($value) 
{ 
    $prefix = '\d{3}'; // You might want to specify '2\d\d' (200 to 299) 
    $regex = '#^(\('.$prefix.'\)|'.$prefix.')[\s\.-]?\d{3}[\.-]?\d{4}$#'; 
    if (preg_match($regex, $value)) 
    { 
     // Number is in a suitable format 

     // Now extract digits -- remove this section to not test repeated pattern 
     $digits = preg_replace('#[^\d]+#', '', $value); 

     // All numbers equal are rejected 
     if (preg_match('#^(\d)\1{9}$#', $digits)) 
      return false; 
     // end of pattern check 

     // Otherwise it is accepted 
     return true; 
    } 
    return false; // Not in a recognized format 
} 

这将接受(299)423-1234和277-111-2222,并且还(400)1234567或40.它将拒绝(400-1234567和400-12-34-56-7。它也会拒绝(222)222-2222,因为重复的2。

+0

真棒,那就像一个魅力!顺便说一句,我把数字提取器中的$ phone改为$ value。 – Shane

+0

谢谢。我看到你的'$ value'太晚了,只改变了我自己'$ phone'的第一个实例*,忘记了第二个。对不起,如果我看起来很密集,但我不熟悉美国(?)的手机格式。我猜2xx是一个蜂窝前缀? – LSerni

+0

例如,如果我们的格式中的2(2XX)2XX-XXXX将永远不会有效,如果是0或1,但其他人可以保持0-9,所以我想通过这种方式来消除不良数字。我们可以建立一个数据库或列表来获得更具体的内容,但是它会过度。这是针对美国的所有电话号码,而不仅仅是手机。 – Shane

1

您可以使用反向引用\1来检测重复出现的模式。你的情况,你可以在.*简单地混合忽略中间填料,如(-

/(\d)(.*\1){7}/ 

将寻找一个号码,相同的至少7次循环,忽略用作填充任何其它字符。这不会确保它们是连续的,所以(222)222-8222也会匹配。

+0

你会如何将这个变成我的preg_match()?我在测试时尝试的所有格式都无效。 – Shane

相关问题