2013-04-23 76 views
0

Iam使用雙字節japaneese字符網站工作,我需要檢查用戶輸入在php平臺中開發的單字節katakana.Site。如何檢查字符串中的單字節片假名

這是我用來檢查 預浸匹配 '/ \ X {} 3040 - \ X {} 309F]/U'

+0

像這樣? '/ \\\\\ x3040 - \\\\\ x309F/u'。 PHP有非常奇怪的RegEx *方法*。此外,你檢查是否「逃脫」x「約3040次,這是不正確的:) – 2013-04-23 05:33:24

+0

其實這種模式是用來檢查片假名,在這裏它檢查單字節和雙字節片假名'/ ^(\ xe3 \ x82 [\ xa1- \ xbf] | \ xe3 \ x83 [\ x80- \ xbe])+ $ /' [http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12288&names=-&utf8=string-字面] – user2251926 2013-04-23 05:37:34

+0

@Allendar,preg意味着perl兼容正則表達式,並且在perl中,一個unicode文字是用\ x {NNNNNN}語法編寫的,所以這可能就是爲什麼op使用這種語法。 – 7stud 2013-04-23 05:54:37

回答

0

我不是100%肯定,如果這個測試字符串我使用是合法的$string。如果結果不同,我會刪除答案(或嘗試更新它)。由於字符串是手動輸入(最初轉義了反斜槓),而不是原始的;

$string = "\\xe3\\x80\\x85"; // RAW input might still be '\xe3\x80\x85' here 

$result = preg_match_all("/\\\\xe3\\\\x8[0-3]\\\\x[8-9a-b][0-9a-f]/u", $string, $matches); 

echo $string; 

echo '<pre>'; 
print_r($matches); 
echo '</pre>'; 

這打印出來;

\xe3\x80\x85 
Array 
(
    [0] => Array 
     (
      [0] => \xe3\x80\x85 
     ) 

) 

因此;

+0

我使用單字節字符'ァ'進行了檢查,但'$ matches'結果爲空 – user2251926 2013-04-23 05:56:03

+0

嘗試使用轉義斜槓(在這種情況下,在所有3個位置上,RegEx本身*和* PHP都可以逃脫)打破字節碼的匹配),因此每個地方都有''\\\\'',可能在你的原始條紋中ng的情況下只有'「\\」'就足夠了,但是從邏輯上來說,這隻會讓PHP逃脫它,而不是RegEx。也許你甚至需要''''''(6)其中。 – 2013-04-23 06:05:08