这是一个非常简单的任务,对字符范围使用正则表达式检查。例如,/^[\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',但我不会称之为“字符串验证”。你有没有想要实现的特定功能? –