需要快速正则表达式

时间:2010-06-08 16:06:38

标签: php regex

我想要一个只允许这样的正则表达式:

 letter a-z
 case insensitive
 allows underscores
 allows any nrs

应该怎么写?

由于

4 个答案:

答案 0 :(得分:7)

那将是

\w

如果我没有弄错(事实证明,这取决于:在PHP中meaning of \w随着当前有效的locale而变化。您可以使用a more explicit form来确定它:

[A-Za-z0-9_]

我在上下文中使用它,添加字符串的开头和字符串结尾anchors以及定义允许的字符数的quantifier

^[A-Za-z0-9_]+$

答案 1 :(得分:5)

<强> PHP:

if (preg_match('/[^a-z0-9_]/i', $input)) {
  // invalid input
} else {
  // valid input
}

因此[a-z0-9_]是有效字符的字符集。在前面添加^[^a-z0-9_])会使其无效。逻辑是,如果任何字符匹配有效字符集中不存在的内容,则输入被视为无效。

最后的/i会使匹配大小写不敏感。

答案 2 :(得分:1)

应该怎么写? (将其分成多行)

/           # Start RegExp Pattern
 ^          # Match beginning of string only
 [a-z0-9_]* # Match characters in the set [ a-z, 0-9 and _ ] * = Zero or more times
 $          # Match end of string
/i          # End Pattern - Case Insensitive Matching

给你

if (preg_match('/^[a-z0-9_]*$/i', $input)) {
  // input is valid
}

如果您想要强制至少一个字符,也可以使用+代替*

答案 3 :(得分:0)

if(preg_match('/^[0-9a-z_]+$/i', $string)) {
  //if it matches
}

else {
  //if it doesn't match
}

[0-9a-z_]是一个字符类,它定义了数字0到9,字母a到z和下划线。最后的i使匹配不区分大小写。 ^$是分别匹配字符串开头和结尾的锚点。 +表示1个或多个字符。