2014-09-04 57 views
1

我一直在努力研究如何在ColdFusion中使用正在運行的REGEX,並修改它以驗證該字符串是否不包含某些字符。無法獲取正則表達式來處理ColdFusion中的字符串

正則表達式的問題是:

^[A-Z][\dA-Z]{3,3}[A-Z]${5} 

以下是我試圖驗證對一個字符串測試:

  1. 必須是5個位數
  2. 第一個字符必須是alpha
  3. 最後一個字符必須是字母
  4. 字符2-4可以是Al PHAS和數字
  5. 可能不包含字母O或我

我試圖驗證應有的格式字符串: AZZZE

所以,它應該 AZZZZ A123Z通過

而失敗, 0A23Z I123Z 一個 A12345

這是測試#5,我根本無法得到。

我已經經歷了亞當卡梅倫對正則表達式和CF(http://blog.adamcameron.me/2012/12/regular-expressions-in-coldfusion-part_22.html),其中他提到了「人物設定否定」這樣優秀的帖子閱讀:

字符集否定 可以創建一個字符集指示匹配除了字符集中的內容外,什麼都沒有。 >這是通過使用所取得的^作爲NOT運算符:

「C [^即] T」將匹配「貓」,「膠輥」和「切斷」(和類似的東西「C_T」),但將特別不符合「cit」和「cet」。

所以我嘗試了一些那...

^(O|I)[A-Z][\dA-Z]{3,3}[A-Z]${5} 

但現在失敗的測試是否有一個O或I或沒有。

我似乎無法讓它失敗,如果字符串有O或我出席。

如何使用正則表達式(reFind,reFindNOCase,IsValid)來實際指示字符串在O或I存在時無效?

我承認,我非常喜歡這個東西。幫幫我!

+2

可能取代'[A-Z]'你可以使用'[A-H,J-N P-Z]'。 – 2014-09-04 19:21:05

+0

羅伯特,你需要做一個負面的前瞻,以確保你不想要的字符不在那裏。我沒有時間(對不起)爲你提供一個精確的例子,但本文中有一個相當徹底的例子:http://cfmlblog.adamcameron.me/2012/12/regular-expressions-in -coldfusion-part_26.html。謝天謝地,我的博客,順便說一句,很高興它幫助你如此:-) – 2014-09-04 19:54:51

+0

嘿!亞當卡梅隆回復我的帖子! Woot Woot! – 2014-09-08 12:31:14

回答

0

你可能想要寫:

^[A-HJ-NP-Z][A-HJ-NP-Z0-9]{3}[A-HJ-NP-Z]$ 
+0

謝謝卡西米爾,它確實有效,但我確信它可以寫得更簡單。這是我想要完成的。 例如,我不會寫0-9,我會寫\ d。 我相信亞當在上面是正確的,因爲負面看看會解決我的問題。我似乎無法弄清楚尚未完成這項工作的語法。 – 2014-09-08 13:18:31

+0

@RobertBartlett:小心'\ d'。在幾種正則表達式中,'\ d'不僅包含'[0-9]',而且所有使'\ d'類的語言的所有數字都比'[0-9]'慢。 – 2014-09-08 13:21:22

+0

@RobertBartlett:在模式開始時使用一個或多個lookahead會減慢正則表達式引擎的速度。 *(但是,這種技術在許多情況下可以得心應手,但在避免它的時候它更好)*。請記住,對於您在開始時使用的每個lookahead,整個字符串會被再次解析。 – 2014-09-08 13:25:41