首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换非GSM-7字符的Regex

替换非GSM-7字符的Regex
EN

Stack Overflow用户
提问于 2014-07-02 17:51:28
回答 1查看 2.3K关注 0票数 0

我正在从一个SO answer修改GM-7设置-它是为Javascript编写的,但我正在修改它以与preg一起工作。

我添加了一个分隔符~\x{XXXX},并在末尾添加了u。我还在开始括号^之后添加了[,这样preg_replace就可以用空格替换任何不是GSM-7字符的字符。

我的问题是,preg_match正确地返回了false,但是preg_replace并没有替换任何东西。

我遗漏了什么?我尝试过在~后面和前面添加括号,但这似乎没有起到任何作用。

下面的代码只显示了乱码的文本,而不是被preg_replace替换为空白的部分。

编辑:,我也尝试过$gsmchars = '~^[^A-Za-z0-9]*$~u';,preg_replace也做过同样的事情--什么也不做。我在我的领地上错过了什么选择?

代码语言:javascript
复制
$gsmchars = '~^[^A-Za-z0-9 \\r\\n@£$¥èéùìòÇØøÅå\x{0394}_\x{03A6}\x{0393}\x{039B}\x{03A9}\x{03A0}\x{03A8}\x{03A3}\x{0398}\x{039E}ÆæßÉ!\"#$%&\'\(\)*+,\\-./:;<=>?¡ÄÖÑܧ¿äöñüà^{}\\\\\\[\~\\]|\x{20AC}]*$~u';

$string = 'ab€m²cdefلg123$';

$match = preg_match($gsmchars, $string);

if ($match === false) {
    die("ERROR");
} else if (!$match) {
    $replace = preg_replace($gsmchars, '', $string);
    //Now that it's in UTF-8, replace the non-GSM chars
    die($replace . "A");    
} else {
    die('match');
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-02 19:17:37

试试这个:

代码语言:javascript
复制
$gsmchars = '~[^A-Za-z0-9 \r\n@£$¥èéùìòÇØøÅå\x{0394}_\x{03A6}\x{0393}\x{039B}\x{03A9}\x{03A0}\x{03A8}\x{03A3}\x{0398}\x{039E}ÆæßÉ!\"#$%&\'\(\)*+,\-.\/:;<=>;?¡ÄÖÑܧ¿äöñüà^{}\[\~\]\|\x{20AC}\\]~u'; // added backslash

$string = 'ab€m²cdefلg123$';
echo preg_replace($gsmchars, '', $string);

$match = preg_match($gsmchars, $string);

if ($match === false) {
    die("ERROR");
} else if ($match) {
    $replace = preg_replace($gsmchars, '', $string);
    //Now that it's in UTF-8, replace the non-GSM chars
    die($replace . "A");
} else {
    die('match');
}

这个站点确实帮助调试正则表达式:

代码语言:javascript
复制
http://regex101.com

if-else是一个匹配的时,您还需要更改您的以继续进行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24537808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档