[英]Problems with preg_match
我正在使用preg_match來驗證表單上的輸入。 具體來說,我正在嘗試驗證貨幣的輸入。 這是功能:
if (preg_match("/^\$(((\d{1,3},)+\d{3})|\d+)\.\d{2}$/i", $inString)) {
return True;
} else {
return False;
}
我可以讓它全部工作。 無論我喂它什么(包括有效字符串),我都會一直返回False。 我確定我做的事情顯然是錯的,但我看不出來。 你知道是怎么回事...
有人有什么建議嗎?
嘗試這樣的事情:
$inString = '1550.50';
if (preg_match("/\b\d{1,3}(?:,?\d{3})*(?:\.\d{2})?\b/", $inString)) {
echo "True";
} else {
echo "False";
}
說明:
\b # word boundary assertion
\d{1,3} # 1-3 digits
(?: # followed by this group...
,? # an optional comma
\d{3} # exactly three digits
)* # ...any number of times
(?: # followed by this group...
\. # a literal dot
\d{2} # exactly two digits
)? # ...zero or one times
\b # word boundary assertion
preg_match
函數已經返回True或False,具體取決於它是否匹配,因此不需要再次返回True或False。
這意味着您可以直接回顯True或False的值:
$inString = "$12.50";
$price_regex = '~^\$(((\d{1,3},)+\d{3})|\d+)\.\d{2}$~';
echo preg_match($price_regex, $inString);
// echoes 1
您也可以直接返回這些值:
return preg_match($price_regex, $inString);
您可以執行布爾測試:
if( preg_match($price_regex, $inString) ) { // take some action }
else { // take another action }
如果您想要的是根據是否匹配來回顯一些值,請執行以下操作:
echo (preg_match($price_regex, $inString)) ? "**It Matches!**" : "Nah... No match." ;
筆記:
~
(更清晰) i
標志(沒有字母,因此不需要區分大小寫) 這兩個答案這項工作之前給出的,但這里的原因,原來的preg_match模式沒有工作的解釋。
這是因為模式用雙引號括起來。 當PHP看到這個時,它將$ sign后面的任何內容視為變量名。 如果您需要在雙引號字符串中包含文字$符號,則美元必須以反斜杠開頭。
所以這兩種模式都有效:
'/^\\$(((\\d{1,3},)+\\d{3})|\\d+)\\.\\d{2}$/i'
"/^\\\\$(((\\d{1,3},)+\\d{3})|\\d+)\\.\\d{2}\\$/i"
'/^\\$(((\\d{1,3},)+\\d{3})|\\d+)\\.\\d{2}$/i'
"/^\\\\$(((\\d{1,3},)+\\d{3})|\\d+)\\.\\d{2}\\$/i"
'/^\\$(((\\d{1,3},)+\\d{3})|\\d+)\\.\\d{2}$/i'
"/^\\\\$(((\\d{1,3},)+\\d{3})|\\d+)\\.\\d{2}\\$/i"
顯然,在這種情況下使用單引號更簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.