我需要一个特殊的正则表达式并且没有任何经验,所以我转向你们这个人。
我需要验证分类广告标题字段,因此它几乎没有任何特殊字符。
只允许使用字母和数字,以及三个瑞典字母å,ä,ö(大写或小写)。
除此之外,还应允许这些:
答案 0 :(得分:20)
试试这个:
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$
故障:
^
=匹配字符串的开头
[...]*
=将括号内的任何字符(或范围)匹配一次或多次
$
=匹配字符串的结尾
已更新,其中包含评论中的所有建议。谢谢你们!
答案 1 :(得分:1)
PHP具有各种可以帮助进行文本验证的功能。您可能会发现它们比直接正则表达式更合适。考虑strip_tags()
,htmlspecialchars()
,htmlentities()
同样,如果您运行的是> PHP5.2,则可以使用专为您的情况设计的优秀Filter功能。
答案 2 :(得分:1)
接受的答案中存在安全漏洞:
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$
这将为空字符串生成真实的响应,因为*
表示0次或多次出现。
这是一个更安全的版本:
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]+$
+
对1次或多次出现的响应为真。
更多信息,请访问https://regexr.com/
答案 3 :(得分:0)
^[\sa-zA-Z0-9åäö&()+%/*$€é,.'"-]*$
将匹配所有必需的字符。
在PHP中:
if (preg_match('#^[\sa-zA-Z0-9åäö&()+%/*$€é,.\'"-]*$#i', $subject)) {
# Successful match
} else {
# Match attempt failed
}
答案 4 :(得分:-1)
在这个例子中 - 我简单地说“这个东西是不被允许的”
更具体地说,“如果它不在这个正则表达式匹配中,用空字符串替换该字符。
PHP:
$result = preg_replace('#([^a-zA-Z0-9£()+=%/*$,.])#imx', '', $subject);
如果您拥有a-zA-Z0-9£()+=%/*$
的部分只是添加了您希望通过正则表达式的字符,则可以在帖子中使用。
更广泛
正则表达式的这个vberion包含所有大写和小写重音字符。他们用ASCII格式,因为我不知道写它们的关键!
$result = preg_replace('#([^a-zA-Z0-9£()+=%/*$,.\x99\xBC\xBD\xBE\xC0\xC1\xC2\xC3\xC4\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD1\xD2\xD3\xD4\xD5\xD6\xE0\xE1\xE2\xE3\xE4\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF9\xFA\xFB\xFC\xFD])#imx', '', $subject);