Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用正则表达式检查字符串是否只包含某些允许的字符?_Php_Regex - Fatal编程技术网

Php 如何使用正则表达式检查字符串是否只包含某些允许的字符?

Php 如何使用正则表达式检查字符串是否只包含某些允许的字符?,php,regex,Php,Regex,我需要一个特殊的正则表达式,在它们方面没有任何经验,所以我在这一点上向你们求助 我需要验证分类广告标题字段,以便它几乎没有任何特殊字符 只允许使用字母和数字,也可以使用三个瑞典字母å、ä、ö(大写或小写) 除上述情况外,还应允许: “&”标志 括号“()” 数学符号“-”、“+”、“%”、“/”、“*” 美元和欧元符号 一个带重音符号的字母:“é”。//只有这个是必需的 双引号和单引号符号 逗号“,”和点“.”符号 试试这个: ^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,

我需要一个特殊的正则表达式,在它们方面没有任何经验,所以我在这一点上向你们求助

我需要验证分类广告标题字段,以便它几乎没有任何特殊字符

只允许使用字母和数字,也可以使用三个瑞典字母å、ä、ö(大写或小写)

除上述情况外,还应允许:

  • “&”标志
  • 括号“()”
  • 数学符号“-”、“+”、“%”、“/”、“*”
  • 美元和欧元符号
  • 一个带重音符号的字母:“é”。//只有这个是必需的
  • 双引号和单引号符号
  • 逗号“,”和点“.”符号
试试这个:

^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$
细分:

^
=匹配字符串的开头

[…]*
=将括号内的任何字符(或范围)匹配一次或多次

$
=匹配字符串的结尾


更新了评论中的所有建议。谢谢大家

嘿,伙计,这真的很简单。只要用正则表达式替换你不想要的任何东西

在这个例子中,我简单地说“这种东西是不允许的”

更具体地说,它说“如果它不在这个正则表达式匹配中,用一个空字符串替换那个字符

PHP:

如果您有
a-zA-Z0-9()+=%/*$
的部分,只需添加您希望通过正则表达式并被允许在文章中使用的字符


编辑: 更广阔

这个正则表达式的版本包含所有大写和小写重音字符。它们是ASCII格式的,因为我不知道写它们的键

[代码><代码><代码>>结果结果=preg的preg的preg的替换的替换的替换的,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\xFD])#imx',''$subject);

将匹配所有必需的字符

在PHP中:

if (preg_match('#^[\sa-zA-Z0-9åäö&()+%/*$€é,.\'"-]*$#i', $subject)) {
 # Successful match
} else {
 # Match attempt failed
}

PHP具有多种功能,可以帮助文本验证。您可能会发现它们比直接正则表达式更合适。


此外,如果您正在运行>PHP5.2,您可以使用非常出色的功能,这些功能正是针对您的情况而设计的。

在可接受的答案中存在一个安全缺陷:

^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$
这将为空字符串生成一个真正的响应,因为
*
用于0次或多次出现

以下是一个更安全的版本:

^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]+$
+
对一个或多个事件的响应为true


更多信息请参见

FYI,“重音符号”不是一个单独的字符。就像å和a是不同的字符一样,é和e(以及ú和u等)也是不同的字符,至少就计算机而言是不同的。那么只需要é,谢谢您希望字符串采用什么编码?(显然不是ascii,utf-8?)为什么要删除字符?看起来html转义字符串比正则表达式匹配每个坏字符并删除它更好。如果这不是一个特定于语言的问题,请删除语言标记。大写的åäöé版本也一样?大写的å,ä,ö,é怎么办?也许/i修饰符?+1回答了问题stion,但我认为他在使用正则表达式插入html之前对字符串进行消毒的设计是脆弱的,html转义函数将更易于维护和理智。至于字母的大写版本,我认为Chris只是给出了一个如何包含它们的示例,Camran可以添加他想要的所有字母。只需在哦,如果你想彻底解释一下正则表达式,主要解释一下^、$、*和括号的意思。小心,
-
是错误的。需要放在字符类的末尾。大多数反斜杠都是不必要的。
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]+$