【发布时间】:2015-08-25 19:30:23
【问题描述】:
所以,我知道我需要一个正则表达式,并使用preg_match()。
documentation for preg_match() 表示如果偏移量大于字符串长度,该函数将返回 false 或 false-ish。我将文档解释为如果没有匹配项,它将返回 false。
我不喜欢正则表达式,但是在阅读了它们on this site 之后,我尝试编写一个函数来满足我的需求。它不工作。
我有以下sn-p:
if (preg_match('/^[a-zA-Z0-9_]+/', $requested_table_name) === false) {
echo "Invalid String";
} else {
echo "You're golden, Ponyboy";
}
如果我正确理解反斜杠开始和结束正则表达式,克拉告诉表达式从字符串的开头开始。字符类表示匹配小写字母、大写字母、数字或下划线的字符,然后+ 符号表示将该字符集匹配到整个字符串,而不仅仅是字符串的第一个字符.
我一定是弄错了,因为我的程序的输出表明无论输入如何,字符串都是有效的。
我的代码的问题是使用preg_match() 函数,还是我的正则表达式的语法?无论哪种情况,具体是什么问题,我该如何解决?
【问题讨论】:
-
使用锚点:
/^[a-zA-Z0-9_]+$/ -
只需使用
\w+、^\w+$(使用锚点来检查完整的字符串)。\w是字母数字字符和下划线。 regular-expressions.info/shorthand.html\w stands for "word character". It always matches the ASCII characters [A-Za-z0-9_] -
@anubhava 这似乎也不起作用。
-
请提供
$requested_table_name所包含内容的样本。 -
@Allenph 例如,
/x+/表示“匹配一个或多个 x”,/[0-9]+/表示“匹配一个或多个数字”。如果要匹配整个字符串,则必须使用锚点。因此,/[0-9]+/表示“字符串必须在任何位置包含一位或多位数字”,/^[0-9]+/表示“字符串必须在开头包含一位或多位数字”,/[0-9]+$/表示“字符串必须包含一位或多位数字结尾”,/^[0-9]+$/表示“整个字符串必须只包含一位或多位数字。”
标签: php regex string validation preg-match