валидация — Как фильтровать валидацию строк на основе локали в PHP?

Я видел регулярные выражения, выполняющие проверку строк для языков, которые охватывают основные символы ASCII, но которые различают другие алфавиты, например: китайский, японский, кириллицу, арабский и т. Д.

Он предназначен для ввода пользователем на многоязычном сайте.
Я могу сказать ожидаемый язык ввода, основываясь на том, что он должен ограничивать ввод для символов этого алфавита.

Это вообще возможно?
Кто-нибудь знает существующую библиотеку, которая выполняет такую ​​проверку?

Если подход белого списка, основанный на локали, нереалистичен, существует ли простое общее решение черного списка, чтобы блокировать все или, по крайней мере, наиболее распространенные специальные символы? (Те, которые не являются членами алфавитов любой локали.)

Спасибо за любые идеи заранее.

3

Решение

Это довольно простая задача, использующая проверку регулярных выражений по диапазонам символов. Например, /^[\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";
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]