2012-02-05 114 views
2

我正在編輯一個現有項目,並且有一個錯誤報告系統不接受數字是否在輸入中位於第一位,如99%Creative。但是,如果您輸入Creative 99%,則系統接受它並將其保存在數據庫中。正則表達式,將檢查表單中的有效輸入

我檢查了現有代碼,發現他們在preg_match中使用了這個表達式/^ [\ p {L}] +/u。我搜索了一下,發現使用\ w但我的高級不會接受我的答案。他說這是不可接受的。這會給一些問題。

請檢查下面的腳本,這是我使用的一個:

$category= trim($_POST['category']); 
if(preg_match('/\W/', $category)){ 
$error='Invalid Input'; 
} 

他告訴我要測試它,使用一些Unicode字符是否會接受像阿拉伯文字,混合(字母+阿拉伯語) 。這一切都有效,所以它的意思很好,但他仍然不接受。他告訴我要制定另一個正則表達式。

你有什麼想法我該怎麼做?我可以用什麼表達方式。我真的不明白爲什麼\ w是不可接受的。

回答

4

The PHP manual on PCRE escape sequences說,在由PCRE \w匹配的字符取決於區域設置(和\W\w否定)。

這在全球環境中是不可接受的,因爲您不知道使用的服務器區域設置。什麼是最後setlocale()電話?該網站是否在美國,法國,中國?你永遠不會知道。今天可能會適用什麼,明天可能不會。用戶改變,網站移動。

例如,您的高級服務器可能會使用與您的服務器不同的語言環境。所以他們可能會說對於某些不在當前語言環境中的角色來說,這並不適用於他們。

這就是爲什麼他們不能接受你的解決方案。您需要改用Unicode character properties

+1

請不要將未註釋的鏈接發送給某些文檔作爲「答案」。你有> 1000代表,你應該知道這是不好的。 – Tomalak 2012-02-05 11:07:55

+0

修復了答案。 – PointedEars 2012-02-05 11:18:50

+1

現在好多了,+1。 – Tomalak 2012-02-05 11:28:22

2

\p{L}表示任何unicode字母,而\w表示[a-zA-Z0-9_]

你也可以使用的\w

[\p{L}\p{N}]+ 

也就是說,字母或數字一次或多次。

+1

據我所知,PCRE中的'\ w'不支持Unicode。 – 2012-02-05 11:05:19

+0

@TimPietzcker:是的,我沒有這麼說。編輯的答案澄清。 – Toto 2012-02-05 11:08:39

+0

手動說\ w取決於語言環境。這就是爲什麼這裏不被接受。 – PointedEars 2012-02-05 11:08:58

2
/^[\p{L}]+/u 

的意思是 「匹配以Unicode字母開頭的字符串」。它將與字符串Creative 99%中的Creative匹配。

\w PCRE正則表達式匹配ASCII字母,數字和下劃線。

如果您將數字添加到您的字符類,也會接受以數字開頭的字符串。

/^[\p{L}\p{N}]+/u 

將字符串99% Creative在匹配99

+0

我用這個正則表達式/^[\ p {L} \ p {N}] +/u但爲什麼它不會接受我輸入%才華。我的老師測試它,並輸入那些有才華的文本,它不保存信息。他說它應該接受這些文本。那個正則表達式有什麼問題? – user1149244 2012-02-13 14:51:15

相關問題