检测任何顺序的字符

Detect Characters In Any Order

我正在整理一个用户名注册系统,我们协议的一部分是用户只能使用 A-Z、a-z、0-9、_、. 和 -。另外,他们不能连续有两个标点符号。

我正在尝试找到一种更简单的方法来检测标点符号,而不仅仅是写出物理字符串:

if (strpos($string, "..") !== false || strpos($string, "._") !== false || strpos($string, "-.") || strpos($string, ".-"))

(以上不包括所有情况,仅举几个例子)

是否有更简单的方法来检查字符串中两个特定字符以任意顺序排列的数学运算?

谢谢!

根据允许的符号进行验证:

if (preg_match("/[^A-Za-z0-9.,_-]/", $string)){
     throw new Exception("Illegal characters in username");
}

检查两个或多个标点符号是否相邻:

if (preg_match("/[.,_-]{2,}/", $string)){
     throw new Exception("Two or more nearby punctuation symbols are not allowed in username");
}

您可以使用 preg_match():

if(preg_match('/\.{2,}|([^a-zA-Z0-9_\-\.]+)/', $username) {
    // invalid username
} else {
    // the username is valid
}

正则表达式会发现无效的用户名:至少两个连续的点,或者允许的字符列表之外的字符。