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