2011-08-08 61 views
0

我wan't检查一个字符串($ nick_2)获得“或N的preg_match条件问题

这是正确的吗?我不能让它工作

if ((strlen($nick_2) >= 3) && (strlen($nick_2) <= 25) && (!preg_match("/\"/", $nick_2)) && (!preg_match("/ñ/", strtolower($nick_2)))) { 
+0

它适合我。也许问题在其他地方? – 2011-08-08 16:34:15

回答

2

为了找到单个字符,正则表达式是巨大的矫枉过正。只需使用

if ((strpos('"', $nick_2) !== FALSE) || (strpos('ñ', $nick_2) !== FALSE)) { 
    ... chars were found 
} 
+0

如果真的应该是字符没有找到? – Zuker

+0

如果未找到该字符,则strpos返回布尔值。如果char在字符串的开始处,它也可以返回0,这会被视为false,这就是为什么您必须使用严格的不等式检查(!==)。 –

+0

所以我应该使用===因为我的真实声明需要找到字符,对吗? 我有 \t \t \t \t \t \t \t \t如果((strpos( '“',$ nick_2)=== FALSE)&&(strpos( 'N',用strtolower($ nick_2))=== FALSE )){ ...未找到字符 } – Zuker

1

也许你的字符串是UTF-8,在这种情况下,你必须使用u修饰符preg_match并应当提交你的表达到功能ALS o UTF-8。

如果是这样的话,你也希望做一些事情:

  • 更换strtolowerstrlenmb_替代品。
  • Normalize的输入。
  • 检查这些字符所在的字形是否没有更多的代码点。