2011-11-13 44 views
2

我有,我想驗證某種模式的字符串:這裏的字符串:正則表達式的代碼,以允許特定模式

 
[alphanumeric characters at the start of the line, then->] ?,?,?,?,?[lines end with: vb|cr|crlf] 

想我實現作爲驗證將確保以下,屬於對「?,?,?,?,?」字符串:(?)如果有多於一個的問號或逗號(,)

  1. 驗證應該返回false在一起。應該導致失敗的一個例子是:?? <or> ,, <or> ??? <or> ,,,

  2. 在行尾驗證應該是問號(?)和逗號(,)。沒有其他字符...

  3. 問題字符串中的最後一個值(也是:"?,?,?,?,?")應該始終是問號而不是逗號。

  4. 同樣,此字符串的開頭應始終是問號而不是逗號。

我希望這可能與preg_match功能,但請讓我知道,如果這是不可能的。

+0

當你寫「[字母在行首的字符「是否意味着沒有任何問題沒有空白空間,應該驗證一下還是與問題無關? –

+0

請你可以添加一些樣本模式。有更好的見解。 –

+0

「vb」是什麼意思? –

回答

1

這個正則表達式怎麼樣?它符合你的測試案例。

/^[A-Za-z0-9()]+(\?(?:,\?)+)?vb\|cr\|crlf$/i 
          ^
          Added this question mark 

現在,正則表達式匹配:

  1. Read)Aloud Your Alphabet(?,?,?vb|cr|crlf
  2. Read)In Silence Respect(vb|cr|crlf

Demo(此演示省略了上面添加問號)

+0

嗨** nickb **,我試過你的正則表達式,它的工作原理蝙蝠!只有一件事我想問...如果,而不是'讀「大聲你的字母表(?,?,?vb | cr | crlf',其中提供了'?,?,?',我們取而代之爲'讀取)在沉默尊重(vb | cr | crlf'中沒有'? ,?,?'(仍然遵循我發佈的問題中提供的原始「驗證準則」,但即使沒有任何'?'或'?,?'序列也是有效的?所以很抱歉打擾你。已經關閉...謝謝你的時間 – Nonym

+0

@NonymIty - 如果'閱讀)在沉默尊重(vb | cr | crlf'應該匹配,那麼你只需要通過後綴使捕獲組可選它帶有問號 - 我已經用修復程序更新了我的答案。 – nickb

+0

感謝您的回答,** nickb **!到目前爲止,我所有的測試都很順利!我實際上試圖自己做,但我錯了嗎?在小組中檢查?和 - 的 - 任何,謝謝! – Nonym

1

試試這個正則表達式:

"/[^,]\?(?:,\?)*vb\|cr\|crlf$/" 

看到它聯機工作:ideone

+0

感謝您的回覆;目前我正在努力使這項工作與Eugene的文章同時進行與此字符串:閱讀)大聲朗讀你的字母(?,?,?vb | cr | crlf – Nonym

+0

字符串*是否以''vb | cr | crlf''結尾?我想你可能誤解了某些東西(或我有)。 –

+0

嗨**馬克Byers **,我很抱歉混淆..我的意思是,字符串必須始終具有整個 - >'vb | cr | crlf'在結尾..我欣賞所有的幫助..我無法立即回覆,因爲我試圖檢查和發揮你的一些和**尤金**的代碼..所以對延誤感到抱歉... – Nonym

0

您正在尋找這樣的:

echo preg_match('/^[A-Za-z0-9\s\(\)]+(\?,)+\?vb\|cr\|crlf$/', $string); 

+0

謝謝您的回覆;我想用下面的字符串試試這個:閱讀)大聲朗讀你的字母(?,?,?vb | cr | crlf – Nonym

+0

我更新了文章 – Eugene

+0

謝謝!對不起,對於遲到的回覆.. – Nonym