【问题标题】:I didn't understand Regex on PHP. [closed]我不了解 PHP 上的正则表达式。 [关闭]
【发布时间】:2015-10-10 06:40:58
【问题描述】:

我正在尝试使用正则表达式代码清除字符串中的所有特殊字符,到目前为止我已经完成了此代码

$data = preg_replace('/[^a-zA-Z0-9]/s', '', $nickname); 

但是这段代码清除了包括空格在内的所有内容,我想允许空格和 - 在字符串上签名,那么我应该在那里添加什么?如果这是一个简单的问题,我很抱歉,但我的英语不是很好,而且我找不到我的主要语言的任何资源。有人可以帮我吗?

【问题讨论】:

  • 尝试 [a-zA-Z0-9\s-] \s 将允许所有空格(包括制表符等);要只允许“空格键”空间,请在正则表达式中使用文字空间。 - 符号必须放在方括号的最后,否则会被解释为一个范围,如 0-9。
  • @m69 s 这里是一个修饰符,但这里没有上下文,因为 . 没有被使用。 php.net/manual/en/reference.pcre.pattern.modifiers.php
  • 我很困惑,所以点会是这样吗? $data = preg_replace('/[^a-zA-Z0-9 -]/s\.', '', $nickname);
  • 为什么我的昵称不能是++%X
  • s 修饰符是这样的,. 包含默认情况下不包含的换行符。您的正则表达式不使用.。来自手册,a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded

标签: php mysql regex


【解决方案1】:

$data = preg_replace('/[^a-zA-Z0-9 -]/s', '', $nickname);

[^a-zA-Z0-9 .-]

Debuggex Demo

【讨论】:

  • 点很特殊,它们匹配每个字符。您必须使用 \. 来逃避它
  • $data = preg_replace('/[^a-zA-Z0-9 -]/s\.', '', $nickname);那么会是这个样子吗?
  • 您实际上不必逃避 .在一个组内。
  • 我很困惑所以会是这样吗? $data = preg_replace('/[^a-zA-Z0-9 -]/s\.', '', $nickname);
  • [] 中的所有内容都是您要匹配的内容的集合。在这种情况下,您正在寻找不属于[] 内部的任何东西(因为^)。所以如果你想允许.,把.放在[]里面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2011-10-10
  • 1970-01-01
  • 2013-03-10
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多