我专门针对数字,所以如果我使用前端使用javascript的手机屏幕过滤用户输入到(000)000-000,基本上[2-9]和[0-9]作为掩码( jquery.maskedinput-1.3.js)和移动过滤器......
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 :(得分: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或4001234567.它将拒绝(400-1234567和400-12-34-56-7。它也将拒绝(222)222-2222因为重复2次。
答案 1 :(得分:1)
您可以使用反向引用\1
来检测重复出现的模式。在您的情况下,您可以简单地混合使用.*
来忽略(
和-
/(\d)(.*\1){7}/
将查找一个数字,并且至少重复7次,忽略用作填充符的任何其他字符。但这并不能确保它们是连续的,因此(222)222-8222
也会匹配。