我有一套规则来验证某些输入。我正在使用正则表达式来测试输入是否有效。这是我的代码。我有大约20条规则,但在这里只显示了2条。
$rules = array( 'telnum' => '/^[0-9,+]+$/i', 'firstname'=>'/^[a-z\'-]+$/i');
说我要验证电话号码。
$match = ((bool)preg_match($rules['telnum'], $str));
工作正常。现在在某些情况下,我需要解析一些信息并清理它们,以便它们根据这些规则有效。我已经知道要使用preg_replace。我可以使用相同的规则来清理字符串,还是需要对规则进行某些更改?如
$cleanstr = preg_replace($rules['telnum'] , '', '+1 (214) 662-2590');
不适合我。它应返回+12146622590,但它返回相同的字符串'+ 1(214)662-2590'。
编辑 - 请注意,代码不会检测哪个规则适用于字符串。我将具体说明每个字符串使用的规则。据我所知,字符串是电话号码还是名字。
答案 0 :(得分:0)
有一种方法。您可以从输入字符串中删除sybmols,并检查每个组合的模式。因此,您必须从输入字符串生成擦除sybmols的所有组合。对于'+ 1(214)662-2590'字符串,它将是 131072 组合。
例如。
$string = '+1 (214) 662-2590';
$pattern = '/^[0-9,+]+$/i';
$strlen = strlen($string);
$iterations = pow(2, $strlen);
for ($i = 0; $i < $iterations; $i++)
{
$tmp_string = $string;
$number = $i;
$k = 1;
while ($number)
{
if ($number % 2)
$tmp_string = substr_replace($tmp_string, '', $strlen - $k, 1);
$number = (int) ($number / 2);
$k++;
}
if (preg_match($pattern, $tmp_string))
{
var_dump($tmp_string); // string(12) "+12146622590"
break;
}
}
使用此功能,您可以使用验证表达式而无需编辑它:^)