PHP:只允许字符串中的某些字符,而不使用正则表达式

时间:2012-05-27 18:48:00

标签: php

我想只允许字符串中的某些字符,我知道 preg_match 很容易,但这个功能我多年来都无法理解:/

正如我所说,我看到了数以百万计的preg_match示例,但我想建立我的,我只想允许:

1)所有上/下英文字母&编号

  

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890

2)所有阿拉伯语字母&编号

  

اأإآبتثحخدذرزسشصضطظعغفقكلمنهويىءئ1234567890

3)以下特殊字符

  

,()/ - +&安培;,

我还想要删除它。

1 个答案:

答案 0 :(得分:6)

您需要先了解正则表达式。它们是编程中的一般概念,并且有比PHP手册更好的阅读它们的地方。试试regular-expressions.info

对于您的特定问题,您需要字符类模式:[...]将匹配括号内的任何字符。如果你在开头用帽子写它,它将匹配括号中的任何字符:[^...]。您想要用任何内容替换所有不匹配的字符,因此您可以使用函数preg_replace

preg_replace("/[^...]/gu", "");

斜杠是必需的分隔符(斜杠是传统的,但还有其他东西可以使用),“g”表示“全局”,如“替换所有出现的,而不仅仅是第一个”,“u”表示“unicode”,它将允许你捕捉阿拉伯字符和最后的奇怪的特殊字符。

现在,你可以列出我放点的所有字符;或者您可以指定字符范围。例如,[^a-zA-Z0-9,.\/+&-]匹配任何字母数字英文字符,除了最后的奇怪字符之外的所有特殊字符:p。请注意,您需要使用反斜杠转义斜杠(因为否则它将终止正则表达式),并且您需要将减号作为最后一个(否则它将被解释为字符范围)。您可以根据需要扩展其他语言(我对阿拉伯语的编码不够熟悉)。