4

我只想允许字符串中的某些字符,我知道使用preg_match很容易,但是这个函数我多年来无法理解:/

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

1) 所有大写/小写英文字母和数字

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890

2) 所有阿拉伯字母和数字

اأإآبتثحخدذرزسشصضطظعغفقكلمنهويىءئ١٢٣٤٥٦٧٨٩٠

3)以下特殊字符

,.()/-+&،

还有什么我想删除的。

4

1 回答 1

6

您需要先了解正则表达式。它们是编程中的一个通用概念,有比 PHP 手册更好的地方来阅读它们。试试正则表达式.info

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

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

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

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

于 2012-05-27T18:54:57.870 回答