簡體   English   中英

解密preg_match

[英]Decipher preg_match

我正在嘗試修復其他開發人員編寫的一些代碼:

 $rexSafety = '@[0-9-\+\s\(\)]+$@';
 if (!preg_match($rexSafety, $_POST['phone'])) $spam = true;

當我輸入不帶空格或任何其他字符的11位數字(英國標准電話長度)時,該數字(來自$_POST['phone'] )被標記為垃圾郵件。

不幸的是,我對正則表達式一無所知,所以我希望有人能夠“破譯”這句話並告訴我期望值是什么?

01234567890應該是一個匹配項。 目前不是。

如果要檢查11位數字,請輸入\\d{11}

 $rexSafety = '~^\d{11}$~';
 if (!preg_match($rexSafety, $_POST['phone'])) $spam = true;

如果帶空格,破折號等的格式有效(不知道英國電話號碼),請首先刪除這些字符以獲取純數字。

$phone = str_replace(array(' ', '-'), '', $_POST['phone']); // remove spaces & dashes
$rexSafety = '~^\d{11}$~';
if (!preg_match($rexSafety, $phone)) $spam = true;

這是您的正則表達式的細目。 我把@扔掉了,因為他使用了@作為邊界字符。 通常,您會使用類似/ (請注意regex101.com使用的名稱)

[0-9-\+\s\(\)]+$

[]表示我們要匹配的字符集。 您將所有想要匹配的內容放入此處。 破折號表示您有一個范圍,因此0-9將匹配所有十進制數字

\\是轉義字符。 這意味着您需要文字字符。 所以\\+將匹配字符串中的+

\\s是與空格匹配的特殊類

\\(\\)表示您想匹配任何括號()

$是字符串的結尾(這是不必要的,因為我們需要匹配的任何東西)

我調整了它,這應該可以做您想要的

if(preg_match('/([^0-9-\+\s\(\)])/', $_POST['phone'])) $spam = true;

通過添加^我們告訴正則表達式我們希望此類匹配任何內容。 我也將其括在括號中以使其成為捕獲組。 這意味着它將抓取匹配的元素並返回它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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