PHP正则表达式:忽略+和#

问题描述:

因此,这里是我做的究竟是什么:PHP正则表达式:忽略+和#

我有在它右侧的标题的形式,我想在窗体上只写AZ,0〜 9和空格,并为标题我想反其道而行之,因此如果用户写的东西错了,我可以表明什么问题for example: "Invalid Charachter"

但我坚持了+#我想忽略他们也从正则表达式的形式,所以我可以显示这些"Invalid character"消息,因为我看到PHP认为+ sign是= space()或什么,但我需要忽略+和#号。这是我当前的代码:

preg_match_all("/[^\w\s]/",$string,$matches); 


foreach($matches[0] as $ic){ 
    if(strpos($str,$ic) || $str[0] == $ic){ 
      $fullname_error = "Invalid Character"; 
    } 
} 

有效的字符串:

  • 李四
  • 玛丽苏

不适字符串:

  • J#翁多伊
  • 约翰&李四
  • 约翰·多伊+
  • 月@ Y +苏
  • !玛丽苏
  • 玛丽苏!
+1

你是哪里人“套牢+和#”,你的意思办通过“忽略他们”?你想删除它们吗?删除一切,但他们?还有什么你无视?我不确定你在问什么。 – 2010-07-04 10:08:07

+0

只看到我目前的代码,但我编辑帖子,以添加更多的意义,我的问题。 – Adam 2010-07-04 10:11:50

+1

您当前的代码匹配所有非单词非空格字符。我不确定你忽略了什么。如果您让我们知道您的*目标*,那将会有所帮助。 – 2010-07-04 10:13:13

你可以做这样的事情来处理无效字符:

$str = '[email protected]#+boo'; 
if (preg_match_all('/[^\w\s]/u', $str, $matches)) { 
    echo sprintf(
     '<p>Your input <b>%s</b> contains %d invalid character%s: <b>%s</b>.</p>', 
     htmlspecialchars($str), 
     count($matches[0]), 
     count($matches[0]) > 1 ? '' : 's', 
     implode('</b>, <b>', array_map('htmlspecialchars', array_unique($matches[0]))) 
    ); 
    echo '<p>Please choose a different input value.</p>'; 
} 
+0

仍然不适用于'#'和'+'对我来说 – Adam 2010-07-04 11:44:21

+1

@Cirk:你是什么意思,对'#'和'+'不起作用?如果'$ str'包含除单词字符('\ w')或空白字符('\ s')以外的任何其他字符,则正则表达式将与这些字符匹配。 – Gumbo 2010-07-04 11:49:00

+0

例如:我写了'口香糖@#+ boo',你的脚本说: '你的输入口香糖@包含1个无效字符:@ .' – Adam 2010-07-04 11:52:20

试试这个:

<? 
function checkString($str) 
{ 
echo "Testing ".$str."<br />"; 
// Check if there are invalid characters 
if (!preg_match("/^[a-zA-Z0-9\s]+$/", $str)) 
    { 
    echo "Oh no! There are invalid characters! :(<br />"; 
    } 
else 
    { 
    echo "There is no invalid character!!! :)<br />"; 
    } 

// What are the invalid characters? 
if (preg_match("/[^(a-zA-Z0-9\s)]/", $str, $matches)) 
    { 
    echo "Invalid character: ".$matches[0]."<br />"; 
    } 
} 

checkString("This is a good string"); 
checkString("This is a not a good string$%#@#$"); 
?> 
+0

嗯,让我试试吧 – Adam 2010-07-04 10:28:46

+1

@Cirk:我写的正则表达式也检查'+'。他们检查任何不是A-Z,a-z,0-9或空格的东西,因此包含“+”。我是说'+'在正则表达式中有特殊的含义,就是这样。如果你想包含它,你只需要用斜杠\\ +' – nico 2010-07-04 10:31:17

+0

就可以逃脱它。现在对于'@ $%'这样的字符无效,我没有看到'无效字符'标题..并且+ $是据我所知,最后搜索,我想在字符串中的任何地方搜索它。对不起,我是新的正则表达式:P – Adam 2010-07-04 10:34:40