2017-07-06 200 views
-1

對不起,如果這是一個愚蠢的問題,但我是新來的正則表達式。出於某種原因,無論我爲其設置$ id,它總是返回true。preg_match總是返回true/1

$id = "tt0944557"; 

if(preg_match("/tt\\d{7}/", $id)) { 
    echo "match"; 
} else { 
    echo "no match"; 
} 

$ id將始終以 「TT」,然後開始7號

+0

你可以試試'/(TT \ d {7})/'首先匹配2 t,然後匹配任意數量的7。 – GrumpyCrouton

+0

'tt0944557'是一個有效的輸入,所以它爲什麼不返回'true'? – anubhava

+1

嘗試「/^tt [0-9] {7} $ /」 – clearshot66

回答

0

試試這個代碼:

$id = "tt0944557"; 

if(preg_match("/(tt\d{7})/", $id)) { 
    echo "match"; 
} else { 
    echo "no match"; 
} 

,我們需要把重點放在什麼明顯的是模式,(tt\d{7})

括號的含義是group,因爲這是一個選擇,整個事情就是一個組。下一部分是tt,這些是文字。它在輸入中找到文字字符串「tt」。接下來的部分是\d{7}\d意味着任何數字{7}意味着正好#在這種情況下,7.因此,它組成字符串爲tt#######

我用regex101

+0

我在regex101上試過這個,但是當我把它放到一個活的腳本中時,它總是如此。 – Benwhittaker25

+0

那麼它會一直如此,如果在你提供的ID匹配 – GrumpyCrouton

1

這應該正常工作建立了這個模式,適用於rubular.com測試:

$id = "tt0944557"; 

正則表達式如下: /^開始從您的字符串

開頭匹配

tt匹配前兩個字符必須是tt

[0-9]只有下一個字符是0,1,2,3,4,5,6,7,8或9

{7}匹配必須正好這些先前字符的7,所以1111111,2232321,但不是123或332. {0,7}會說,它可能是0,1,2,3,4,5,6或7長

$/停止匹配這裏

if(preg_match("/^tt[0-9]{7}$/", $id)) { 
    echo "match"; 
} else { 
    echo "no match"; 
} 
+0

我對於正則表達式也很新穎,並且很想知道,是什麼讓你成爲比我更好的答案?或者它們基本相同?另外,我無法讓你的工作使用[PHPTESTER](http://phptester.net/),我認爲你錯過了模式中的結尾斜槓。另外我想說,我不是在敲你的答案,我會合法地喜歡更多地瞭解你的答案vs我的:) – GrumpyCrouton

+0

@GrumpyCrouton不,我說哪裏更好?我只是提交了我的答案的版本,一個替代正則表達式匹配。使用完全表示代替\ d,因爲我工作的地方\ d將允許任何數字,其中[0-9]我也可以[0-3]只允許0,1,2和3作爲可能的選項參見http:// rubular.com/r/Hnf2hRNZNp – clearshot66

+0

我告訴過你爲什麼大聲笑 – clearshot66