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åäöÅÄÖ&()+%/*$€é,.'"-]+$