簡體   English   中英

清理字符串,使其對某個正則表達式有效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM