這是一個非常簡單的任務,對字符範圍使用正則表達式檢查。例如,/^[\x{0}-\x{1b}]*$/u
將與字符的字符串匹配從ASCII 0到27
所以,唯一的真正的努力是獲得所有的Unicode板塊下跌:
<?php
class UnicodeBlockCheck
{
const ADLAM = [0x1E900, 0x1E95F];
const AGEAN_NUMBERS = [0x10100, 0x1013F];
const AHOM = [0x11700, 0x1173F];
const ALCHEMICAL_SYMBOLS = [0x1F700, 0x1F77F];
// and so on
private $block;
public function __construct($block)
{
if (!is_array($block) || $block[1] <= $block[0]) {
throw new Exception("Bad character range passed!");
} else {
$this->block = $block;
}
}
public function isValid($string)
{
$st = dechex($this->block[0]);
$fi = dechex($this->block[1]);
$pattern = '/^[\x{' . $st . '}-\x{' . $fi . '}]*$/u';
return preg_match($pattern, $string);
}
}
$bc = new UnicodeBlockCheck(UnicodeBlockCheck::ALCHEMICAL_SYMBOLS);
if ($bc->isValid("")) {
echo "Valid characters";
} else {
echo "Invalid characters";
}
單詞「驗證」,沒有進一步的上下文,沒有意義。什麼標準使給定的字符串對您無效?日本用戶不能輸入英文字母嗎?阿拉伯用戶不能輸入西方數字嗎? –
嗨,感謝您的反饋,我試圖引用PHP的過濾器驗證功能:http://php.net/manual/en/filter.filters.validate.php - 所以當一個刺包含點,逗號,主題標籤,&符號等等,它們不是給定語言環境中的實際字母字符。防止日本人寫英文的事實並不重要。 – Mike
我仍然無法看到'FILTER_VALIDATE_BOOLEAN','FILTER_VALIDATE_EMAIL','FILTER_VALIDATE_FLOAT' ...應該如何受字母表影響。當然,用戶可以在例如鍵盤上輸入FLOAT。西班牙語區域'1.123,56',但我不會稱之爲「字符串驗證」。你有沒有想要實現的特定功能? –