У вас есть несколько перекрывающихся диапазоны символов, и похоже, что вы пытаетесь протестировать всю чтобы убедиться, что это не соответствует ТОЛЬКО эти символы? Таким образом вы получите довольно много ложных негативов. Это может сработать, если вы вернетесь «успешно» на успешный preg_match
, но все-таки по-настоящему назад.
Кроме того, если вы хотите совместить символы юникода, вам понадобится модификатор /u
, чтобы обработать строку как UTF-16
. Вы также можете использовать Unicode range or block вместо широкого диапазона, если хотите; вам все равно понадобится /u
.
Работа выражение, которое позволит строка быть действительным, если все его символы только в этом диапазоне:
<?php
$teststring="ΑαβγδεζηθΙκΛμ";
if(preg_match("/^[A-Za-z0-9α-ωΑ-Ω ίϊΐόάέύϋΰήώ-]+$/u", $teststring))
// ^note the unescaped hyphen is an
// actual hyphen not a char range
{
echo "success";
}
else
{
echo "invalid char";
}
?>
Вы также заметите, если вы попытаетесь его без модификатора /u
, вы будете получить следующее сообщение об ошибке:
Warning: preg_match(): Compilation failed: range out of order in character class at offset {line_num}
пожалуйста разместить ваш реальный код –
Может хотите использовать [UNICODE точек] (http://www.regular-expressions.info/refunicode.html), чтобы избежать проблем кодирования. – Sam