按任意顺序检测字符

时间:2015-04-30 18:57:06

标签: php strpos

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

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

body

(以上不包括所有案例;仅举几个例子)

是否有更简单的方法来检查字符串,以便按行任何顺序连续计算两个特定字符的数学?

谢谢!

2 个答案:

答案 0 :(得分:4)

验证允许的符号:

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");
}

答案 1 :(得分:1)

您可以使用preg_match()

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

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