0

我需要使用以下模式限制电话号码:

0123456789, 
1111111111, 
2222222222, 
3333333333, 
4444444444, 
etc.

我正在尝试用 PHP 来实现。

到目前为止,我想出了创建一个数组并在其中搜索以限制该手机号码。

有没有更好的方法来做同样的事情?

可能是一个正则表达式,也可能是 javascript。

4

3 回答 3

2

如果您不想像您提到自己那样不断更新一长串数字以进行检查,那么您基本上想要进行模式检测/模式识别

根据您以前的知识,这可能是微不足道的,也可能是非常复杂的。

可以在这里找到一个小的开始......但是关于这个主题有很多非常厚的书;)

http://en.wikipedia.org/wiki/Pattern_recognition

所以“最简单”的方法可能是使用数组查找。缺点是您必须事先知道要列入黑名单的每个号码。一种中间方法是拥有一组您检查的无效格式的正则表达式,而不是在数组中包含实际数字。

因此,您可以使用正则表达式涵盖以下内容

  • 简短的数字
  • 数字变长
  • 只有相同数字的数字

ETC

根据可用的系统和地理位置,实际上可能可以对一些已知的数字数据库进行某种查找。但这可能会导致未列出的数字出现误报。

对于一个全局的、动态的、工作的系统来说,保持查找数组和对数据库进行查找都可能被证明变得非常难以处理,因为要保持工作支持的已知数据源的数量可能会增长到难以处理。

于 2013-04-24T06:59:07.463 回答
2

如果您需要阻止特定的电话号码,您可以这样做:

$numberToTest = [...]; // this is your user input number to test

$notAllowed = array(
  '0123456789',
  '1111111111',
  '2222222222',
  // and so on
);

if(in_array($numberToTest, $notAllowed)) {
  // NOT VALID
}
else {
  // VALID
}

要匹配所有数字,如 1111111111、2222222222 等,您可以这样做:

if(preg_match('/^(\d)\1{9}$/', $numberToTest)) {
  // NOT VALID
}
else {
  // VALID
}
于 2013-04-24T06:47:31.177 回答
0

带有正则表达式的 Javascript。当号码在受限列表中时,isRestricted 设置为 true:

var number = "0123456789";
var isRestricted = number.match( /0123456789|1111111111|2222222222|3333333333|4444444444/g ) != null;

我确信 regexps 与 PHP 的使用方式与使用preg_match的方式几乎相同。

于 2013-04-24T07:13:24.980 回答