2009-06-08 68 views
1

感謝S. Gehrig在initial question的答案我有一個正常工作的正則表達式,並且基於Letter屬性驗證變量(中文除外,但這是另一個主題:) :OR運算符在PHP正則表達式(包括Unicode驗證)

if (preg_match('/^\p{L}+$/u', $input)) { 
    // OK 
} 

可惜我不能擴展它支持支持數字相應的問題/感嘆號&合作。我的實驗包括:

'/^[\p{L}]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]+$/u' 
'/^[\p{L}+]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]$/u' 
'/^[\p{L}+]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]$/u' 

什麼是正確的正則表達式?請指向正確的方向。

很多,非常感謝!

+0

你想用這個正則表達式做什麼?標題沒有意義。 – 2009-06-08 17:08:30

+0

已更新,我希望現在更有意義 – MrG 2009-06-12 10:18:39

回答

1

\p{L}+已經是「非空字符串\p{L}」。 [],另一方面表示「之一」,從而根據您的實際需求,無論這應該工作:

任何(正,非零)的序列號指定的字符:

/^[\p{L}0-9\n'?!.,]+$/u 

要麼的\p{L}秒的序列或混合[0-9\n'?!.,]序列:

/^(\p{L}+|[0-9\n'?!.,]+)$/u 

要麼的\p{L}秒的序列或[0-9\n'?!.,]正好一個:

/^(\p{L}+|[0-9\n'?!.,])$/u 
+0

您可以將字符類中的\ p {L}與文字字符一起放入。 – 2009-06-08 15:07:42

+0

感謝您的提示。我對php的正則表達式並不特別堅定。 – 2009-06-08 16:57:05

+0

注意!你的兩個正則表達式不等價。 '/^foo | bar $ /'等於'/(?:^ foo)|(?:bar $)/'和'/(?:^ foo | bar $)/'但不等於'/^(?:富|酒吧)$ /'! – Gumbo 2009-06-08 17:03:06