2011-09-21 152 views
1

一些特殊字符以下的正則表達式的任何Unicode字母 + Unicode數字匹配 + 元音符號 + + 短跑 + 下劃線 + 空間允許使用正則表達式

/^[\w\pN\pL\pM .-]+$/u 

成功運行。

我想修改我的正則表達式,因此接受以下:

? ! () % @ # , + - : newline 

-代表負號。

我嘗試不起作用:

/^[\w\pN\pL\pM .-**?!()%@#,+-:\r**]+$/u 

這裏是我的代碼片段,其中最近的一次嘗試:

if(preg_match('/^[\w\pN\pL\pM .-?!()%@#,+-:\r]+$/u', $_POST['txtarea_msg'])) 

任何想法?

回答

1

/^[\w\pN\pL\pM \?!\(\)%@#,\+\-:\n\r]+$/u應該這樣做。

+1

downvote的任何理由? –

+0

For \ n \ r ...這就是我要找的 – user311509

-1

有些是正則表達式字符,所以你需要轉義:

/^[\w\pN\pL\pM .?!()%@#,+\-:\r]+$/u 

還要注意一個換行符(\n)並回車(\r)之間的差異。

+2

Thanks downvoter。謹慎闡述? –

+0

根據** Marc B **的闡述,我刪除了括號的轉義。我留下了這個答案,因爲我相信,如果沒有別的,換行符上的註釋是相關的。 –

2

-是字符類元字符,所以你說:

blahblahblah從.? blahblahblah所有字符從+:等等等等所有字符

它需要一個\逃脫:blahblah .\-? blahblah +\-: blahblah

+1

+1僅用於轉義角色類中需要轉義的角色。 –

+0

出於好奇,在字符類中不會發生捕捉嗎?我從來沒有嘗試過,但認爲括號也需要轉義。 –

+0

你可以捕捉整個班級,但不能在班級內。我不知道是否有任何意見允許在課堂上捕捉。根據定義,字符類被視爲單個字符匹配位置,它必須包含一個類內字符。做類似'[(ab)(cd)]'的東西只會混淆事物。如果'a'匹配並被捕獲,那麼'(cd)'永遠不會發生。但是你已經用完了一張cd的抓拍插槽,那麼應該怎麼做呢? –