private function check_user()
 {
     if (strcasecmp($this->text, "anonymous") == 0 && !$this->cset && !($this->type & self::F_PC)) {
         $result = Dbl::qe_raw("select contactId from ContactInfo where email regexp '^anonymous[0-9]*\$'");
         return Dbl::fetch_first_columns($result);
     }
     // split name components
     list($f, $l, $e) = Text::split_name($this->text, true);
     if ($f === "" && $l === "" && strpos($e, "@") === false) {
         $n = $e;
     } else {
         $n = trim($f . " " . $l);
     }
     // generalize email
     $estar = $e && strpos($e, "*") !== false;
     if ($e && !$estar) {
         if (preg_match('/\\A(.*)@(.*?)((?:[.](?:com|net|edu|org|us|uk|fr|be|jp|cn))?)\\z/', $e, $m)) {
             $e = ($m[1] === "" ? "*" : $m[1]) . "@*" . $m[2] . ($m[3] ?: "*");
         } else {
             $e = "*{$e}*";
         }
     }
     // contact database if not restricted to PC or cset
     $result = null;
     if ($this->cset) {
         $cs = $this->cset;
     } else {
         if ($this->type & self::F_PC) {
             $cs = pcMembers();
         } else {
             $q = array();
             if ($n !== "") {
                 $x = sqlq_for_like(UnicodeHelper::deaccent($n));
                 $q[] = "unaccentedName like '%" . preg_replace('/[\\s*]+/', "%", $x) . "%'";
             }
             if ($e !== "") {
                 $x = sqlq_for_like($e);
                 $q[] = "email like '" . preg_replace('/[\\s*]+/', "%", $x) . "'";
             }
             $result = Dbl::qe_raw("select firstName, lastName, unaccentedName, email, contactId, roles from ContactInfo where " . join(" or ", $q));
             $cs = array();
             while ($result && ($row = Contact::fetch($result))) {
                 $cs[$row->contactId] = $row;
             }
         }
     }
     // filter results
     $nreg = $ereg = null;
     if ($n !== "") {
         $nreg = PaperSearch::analyze_field_preg($n);
     }
     if ($e !== "" && $estar) {
         $ereg = '{\\A' . str_replace('\\*', '.*', preg_quote($e)) . '\\z}i';
     } else {
         if ($e !== "") {
             $ereg = str_replace('@\\*', '@(?:|.*[.])', preg_quote($e));
             $ereg = preg_replace('/\\A\\\\\\*/', '(?:.*[@.]|)', $ereg);
             $ereg = '{\\A' . preg_replace('/\\\\\\*$/', '(?:[@.].*|)', $ereg) . '\\z}i';
         }
     }
     $ids = array();
     foreach ($cs as $id => $acct) {
         if ($ereg && preg_match($ereg, $acct->email)) {
             // exact email match trumps all else
             if (strcasecmp($e, $acct->email) == 0) {
                 $ids = array($id);
                 break;
             }
             $ids[] = $id;
         } else {
             if ($nreg) {
                 $n = $acct->firstName === "" || $acct->lastName === "" ? "" : " ";
                 $n = $acct->firstName . $n . $acct->lastName;
                 if (PaperSearch::match_field_preg($nreg, $n, $acct->unaccentedName)) {
                     $ids[] = $id;
                 }
             }
         }
     }
     Dbl::free($result);
     return $ids;
 }