Cytat(AxZx)

minimum 3 litery, maksimum 1 myślnik
To oczywiście jest troszkę inne rozwiązanie bo wykorzystujące funkcję, a nie wyrażenie regularne. Nie wiem jak z wydajnościa, która będzie lepsza. Czy wyszukiwanie za pomocą wyr. reg. korzystające z teorii automatów skończonych czy też korzystając z tej funkcji i jednej pętli for (złożoność liniowa).
A oto sama funkcja:
<?php
function myReg($r)
{
$l = 0; // licznik liter
$m = 0; // licznik myslnikow
for($i = 0
, $len = strlen($r); $i < $len; $i++) {
if((($r[$i] >= 'A') && ($r[$i] <= 'Z')) || (($r[$i] >= 'a') && ($r[$i] <= 'z')))
{
$l++;
}
if($r[$i] == '-')
{
$m++;
}
}
return (($l >= 3) && ($m <= 1));
}
?>
W każdym razie do czasu aż ktoś napisze dobrze to wyr. reg. (jeżeli już koniecznie musisz użyć wyr. reg.) możesz skorzystać z tej funkcji. Oczywiście zalecane byłoby żebyś dopisał jeszcze warunek na początku tej funkcji na wypadek, gdyby argument funkcji nie był łańuchem znaków, ale...