2013-06-12 71 views
1

我仍然是一個正則表達式的新手。我要創建這個規則正則表達式:字母數字,空格,破折號和散列表的正則表達式

if (preg_match('^[ A-Za-z0-9_-#]^', $text) == 1) { 
    return true; 
} 
else { 
    return false; 
} 

總之,我想$文本接受文本,數字,空格,下劃線,破折號和散列(#)。 上述reg表達是否正確?它總是返回true。

+0

你有兩個''^錨。 – Blender

+1

@Orangepill不行,破折號是在錯誤的地方。 –

回答

6

首先,您不應該使用^作爲表達式邊界,因爲它們也用於表達式錨;改爲使用/,~#

二,字符集中的破折號應該在最後位置;否則它的範圍從_#,這可能不是你想要的。

第三,表達式現在只匹配單個字符;你會想要使用乘數,如+*

最後,您應該錨表達這樣,只有那些有效字符存在的字符串:

/^[ \w#-]+$/ 

順便說一句,我把它換成A-Za-z0-9_\w作爲一種快捷方式。

+1

太棒了!有用!非常感謝! –

2

,你可以做:

  1. \w立場[a-zA-Z0-9_]
  2. 字符-在字符類特殊的意義,因爲它是用來定義範圍,因此必須將其放置在開始時或在課堂結束時
  3. preg_match函數返回0如果沒有匹配或錯誤發生時爲false,因此您不需要測試它是否等於1(您可以使用preg_match返回來做事情)

例如:

if (preg_match('~[\w #-]++~', $subject)) 
    ... 
else 
    ... 
相關問題