我想要一个只允许这样的正则表达式:
letter a-z
case insensitive
allows underscores
allows any nrs
应该怎么写?
由于
答案 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个或多个字符。