diff --git a/include/class.validator.php b/include/class.validator.php
index 171f85f220a3471a84820616dd80752438607248..62ce6815345bb754a9d260211b1585f42e7c836d 100644
--- a/include/class.validator.php
+++ b/include/class.validator.php
@@ -173,7 +173,7 @@ class Validator {
     function is_username($username, &$error='') {
         if (strlen($username)<2)
             $error = 'At least two (2) characters';
-        elseif (!preg_match('/^[\p{L}._-]+$/u', $username))
+        elseif (!preg_match('/^[\p{L}\d._-]+$/u', $username))
             $error = 'Username contains invalid characters';
         return $error == '';
     }
diff --git a/setup/test/tests/test.validation.php b/setup/test/tests/test.validation.php
new file mode 100644
index 0000000000000000000000000000000000000000..942767329642101c1f6db4a483ff23798936c118
--- /dev/null
+++ b/setup/test/tests/test.validation.php
@@ -0,0 +1,21 @@
+<?php
+
+require_once INCLUDE_DIR.'class.validator.php';
+
+class TestValidation extends Test {
+    var $name = "Validation checks";
+
+    function testValidUsernames() {
+        // Ascii
+        $this->assert(Validator::is_username('jared'));
+        $this->assert(Validator::is_username('jared12'));
+        // Unicode
+        $this->assert(Validator::is_username('järed'));
+        $this->assert(Validator::is_username('järed12'));
+        $this->assert(Validator::is_username('中国期刊全文数据'));
+        // Non-letters
+        $this->assert(!Validator::is_username('j®red'));
+    }
+}
+return 'TestValidation';
+?>