2009-11-21 88 views
6

如果我需要一個字符串來匹配這個模式:「word1,word2,word3」,我將如何檢查字符串以確保它適合PHP?檢查一個字符串是否匹配模式

我想確保字符串符合這些模式:

word 
word1,word2 
word1,word2,word3, 
word1,word2,word3,word4,etc. 

回答

9

使用regular expressions

preg_match("[^,]+(,[^,]+){2}", $input) 

這符合:

stack,over,flow 
I'm,not,sure 

但不是:

, 
asdf 
two,words 
four,or,more,words 
empty,word, 
+0

你怎樣才能使它與任何數量的單詞一起工作? – Andrew 2009-11-21 23:27:52

+2

將「{2}」更改爲「*」 – 2009-11-21 23:35:51

+0

哦,好的。謝謝。 :) – Andrew 2009-11-22 19:09:13

2
preg_match('/word[0-9]/', $string); 

http://php.net/manual/en/function.preg-match.php

+0

不支持PHP正則表達式文字?上次我不得不使用字符串... – knoopx 2009-11-21 23:16:33

+1

我不認爲這是他的意思。 – 2009-11-21 23:19:24

+0

對不起。使用多種語言的副作用。 Ruby將採取文字。 (或將「'解釋爲」分隔符「。) – CodeJoust 2009-11-22 13:47:45

1

,如果你嚴格想匹配一個或多個完整的單詞,而不是逗號分隔短語嘗試:

preg_match("^(?:\w+,)*\w+$", $input) 
0

當我需要確保我的整個字符串一個模式匹配,我這樣做:

恩,我想一個年月日日期(不YMD H:I:S)

$date1="2015-10-12"; 
$date2="2015-10 12 12:00:00"; 

function completelyMatchesPattern($str, $pattern){ 
    return preg_match($pattern, $str, $matches) === 1 && $matches[0] === $str; 
} 

$pattern="/[1-9][0-9]{3}-(0[1-9]|1[0-2])-([012][1-9]|3[01])/"; 

completelyMatchesPattern($date1, $pattern); //true 
completelyMatchesPattern($date2, $pattern); //false 
相關問題