正则表达式去除非键盘字符

4

我正在尝试从用户输入中删除所有非键盘字符,但我很难做到。以下正则表达式只替换一个字符而不是多个...我已经尝试将结尾的/i替换为/ig,但它被识别为未知标志而失败。我还尝试使用*和其他各种组合,但似乎无法解决问题。

$data = preg_replace('/[^a-z0-9<>\s\!\@\#\$\%\^\&\*\(\)\_\+\-\=\{\}\[\]\|\\\:\;\"\'\?\/\>\.\<\,\®]/i', '', $data);

针对此文本进行测试:

营养咨询 <br /><br />在线诊所访问,除非在证书或EOC中明确涵盖。<br /><br />健身俱乐部会员资格 <br /><br />任何服务,只要您有权获得这些服务的医疗保险福利而无需支付额外的医疗保险费用 <br /><br />食品或膳食补充剂,除非在证书或EOC中明确说明或法律要求 <br /><br />非医疗原因进行基因检测,或者没有医学指示或家族遗传异常史 <br /><br />户外治疗项目 <br /><br />当义肢和耐用医疗设备丢失或被盗时替换 <br /><br />与代孕妊娠有关的向未纳入协议范围内的任何人提供的任何服务或用品 <br /><br />仅为出国旅行而接种的疫苗 <br /><br />与既往病史有关的服务或用品 <br /><br />除非由Anthem Blue Cross特别提供或安排,否则不提供教育服务 <br /><br />不孕不育治疗服务(包括绝育手术逆转和与精子、卵子、胚胎和卵巢组织储存相关的费用),除非在证书或EOC中明确说明 <br /><br />在非承包医院提供的护理或治疗 <br /><br />私人护理服务,除非在证书或EOC中明确说明 <br /><br />主要用于减重的服务,除非是治疗病态肥胖的必要医疗服务 <br /><br />在任何门诊设置中分发或管理的门诊药物、药物或其他物质 <br /><br />避孕器具,除非您的医生确定口服避孕药不适合您。 <br /><br />静脉治疗:进行任何方法(包括硬化疗法或其他手术)治疗静脉曲张或毛细血管扩张的皮肤静脉(蜘蛛痣),当服务是为了美容目的时。 <br /><strong><br />第三方责任</strong> - 如果成员从法律上有责任的第三方恢复损失,则Anthem Blue Cross有权获得支付的福利的偿还。 <br /><br /><strong>协调福利</strong> - 如果成员拥有任何其他团体医疗保健、牙科、处方药或视觉保险,那么该计划的福利可能会减少,以使所有团体保险覆盖的服务不超过100%的覆盖费用


8
请恕我无知,我认为所有字符都可以通过键盘输入? - ajreal
4
你可能指的是非字母数字字符? - Wesley van Opdorp
1
可能重复:https://dev59.com/V3M_5IYBdhLWcg3wZSE6 - piddl0r
7
哪一个键盘?我的德国键盘?你的美国键盘?我的邻居的法国键盘还是我同事的俄罗斯键盘? - Daniel Hilgarth
1
\Q...\E是你的好朋友。它可以抑制它们之间的特殊字符,将它们按字面意义进行匹配。http://www.regular-expressions.info/reference.html - dlras2
显示剩余2条评论
1个回答

2

抱歉,我的第一个答案中混淆了一些内容。

PHP不支持g修饰符。如果你只想匹配它,请使用preg_match_all而不是preg_match,但是preg_replace默认是贪婪的。

我在writecodeonline.com上尝试了这段代码。

$data = "Nutritional counseling <br /><br />Online ÄÖÜ Clinic Visits except as specifically covered in the Certificate or EOC. ÂÂ<br /><br />";
$pattern = '/[^a-z0-9_<>\\s!@#$%^&*()+={}\\[\\]|\\/:;"\\'?.,®-]/i';

$data = preg_replace($pattern, '', $data);
echo ($data);

并且它正在工作。

由于某种原因,这里需要进行双重转义,如果您不需要它,只需在模式中删除每个第二个反斜杠即可。

我稍微清理了您的字符类。当它们在字符类内部时,大多数字符不需要被转义,只有那些即使在这样的类内部也具有特殊含义的字符,例如/用作正则表达式分隔符时,'用作字符串分隔符时...

但是最终即使您的代码能够工作,当我只是将您的代码更改为双重转义。


很遗憾,PHP中不存在那个函数...你是想使用preg_match_all吗? - Ben
@Webnet 是的,我搞混了些东西。 - stema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接