2014-01-13 3 views
0

Пожалуйста, смотрите мою рег ех ниже:preg_match оленья кожа позволяют греческие символы

$teststring="αβγδεζηθΙκΛμ"; 

if(!preg_match("/^[A-ZA-zΑ-Ωα-ωίϊΐόάέύϋΰήώ0-9\- ]+$/", $teststring)) 
{ 
    echo "invalid char"; 
} 
else 
{ 
    echo "success"; 
} 

Благодарности

+1

пожалуйста разместить ваш реальный код –

+0

Может хотите использовать [UNICODE точек] (http://www.regular-expressions.info/refunicode.html), чтобы избежать проблем кодирования. – Sam

ответ

2

У вас есть несколько перекрывающихся диапазоны символов, и похоже, что вы пытаетесь протестировать всю чтобы убедиться, что это не соответствует ТОЛЬКО эти символы? Таким образом вы получите довольно много ложных негативов. Это может сработать, если вы вернетесь «успешно» на успешный 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} 
1

Не забудьте использовать точку с запятой:

<?php 

$teststring="αβγδεζηθΙκΛμ"; 

if (!preg_match("/^[A-ZA-zΑ-Ωα-ωίϊΐόάέύϋΰήώ0-9\- ]+$/", $teststring)) { 
    echo "invalid char"; # Semicolon was missing from here 
} 
else { 
    echo "success"; # Semicolon was missing from here 
} 

http://ideone.com/Ylmh0H

+0

спасибо, что он работает с вводом, который я предоставил, как ни странно, если вы попытаетесь использовать его с определенной строкой, это не удается и не уверен, почему ... например: http://ideone.com/8bJkkh – Athanatos

+0

Похоже, что это работает как и предполагалось, поскольку условие успеха - это когда оно не соответствует: 'if (!' –

Смежные вопросы