[英]Clean a string so that it is valid for a certain regular expression
我有一組規則可以驗證某些輸入。 我正在使用正則表達式來測試輸入是否有效。 這是我的代碼。 我大約有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”。
編輯-請注意,代碼不會檢測到哪個規則適用於字符串。 我將具體告訴該規則用於每個字符串。 據我所知,字符串是電話號碼還是名字。
有一種方法。 您可以從輸入字符串中刪除sybmol,然后檢查每個組合的模式。 因此,您必須從輸入字符串生成所有擦除的sybmol組合。 '+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;
}
}
這樣,您可以使用驗證表達式而無需編輯它的:^)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.