2012-05-02 59 views
2

我現在正在一個grails項目上工作,並且Im很難用正則表達式來過濾我想要的所需數據。這是怎麼回事,我有一個可以接受所有字母和數字(大寫和小寫)的字段,以及鍵盤上的所有特殊字符(@ * $ &#)。如果它是數字和字母(0925abc)或字母,數字和特殊字符(0925abc?> <)的組合,它將只接受輸入。如果是純字母(adCbT),純數字(0383)或純特殊字符(@#$> _ + - ),系統將拒絕輸入。這可能與grails中的正則表達式約束有關嗎?感謝您分享您的知識。正則表達式約束驗證 - grails

+0

這是w.r.t.域類字段?你有沒有嘗試過使用驗證器? http://grails.org/doc/latest/ref/Constraints/validator.html –

+0

是的,但我認爲如果我爲此使用驗證程序,會浪費行數。我相信使用正則表達式驗證會容易得多,我只是對如何使用它感到困惑。 – antibry

+0

如果您打算在所有實例中執行操作,則操作本身非常高效。此外,正則表達式在這裏和其他地方一樣。無論如何,你能給出一個代碼示例嗎?沒有看到任何示例代碼就很難解決您的問題。 –

回答

2

所以,如果你只是尋找它適合你的約束上一個正則表達式,像

'.*([a-zA-Z][[email protected]*$&#]+|[0-9][[email protected]*$&#]|[@*$&#][0-9a-zA-Z]).*' 

應該做的伎倆。它確保在輸入中至少有一個從一個字符類到另一個字符類的轉換。

帶負先行,這是更容易保持

'^(?![a-zA-Z]+$)(?![0-9]+$)(?![@*$&#]+$).+$' 

一點點三個方面確保輸入不會從一個字符類僅包含charecters的。

這裏是一些代碼來測試表達式:

def ok = ['asdasd90','90asdas','asd#sdfsd9','asd9sdf','908787#@'] 
def nok = ['asdewSDFDSFasd','23803','@*$&#'] 
def expression = '^(?![a-zA-Z]+$)(?![0-9]+$)(?![@*$&#]+$).+$' 
ok.each { value -> 
    assert value.matches(expression) 
} 
nok.each { value -> 
    assert !value.matches(expression) 
}