我需要一个特殊的正则表达式,但我对它们毫无经验,所以在这方面我求助于你们。
我需要验证分类广告标题字段,以确保它不包含任何特殊字符,几乎没有。
只允许字母和数字,还有三个瑞典字母 å、ä、ö(大写或小写)。
除了上述内容之外,还应允许以下内容:
- "&" 符号。
- 括号 "()"
- 数学符号 "-", "+", "%", "/", "*"
- 美元和欧元符号
- 一个带重音符号的字母:"é"。 // 仅此一个是必需的
- 双引号和单引号符号。
- 逗号“,”和点号“.”符号
我需要一个特殊的正则表达式,但我对它们毫无经验,所以在这方面我求助于你们。
我需要验证分类广告标题字段,以确保它不包含任何特殊字符,几乎没有。
只允许字母和数字,还有三个瑞典字母 å、ä、ö(大写或小写)。
除了上述内容之外,还应允许以下内容:
试试这个:
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$
解析:
^
= 匹配字符串的开头
[...]*
= 匹配方括号中的任何字符(或范围)一次或多次
$
= 匹配字符串的结尾
已更新,采纳了评论中的所有建议。感谢大家!
ÅÄÖ
到其中,你就完成了 :) 如果你想要更加详细,解释一下正则表达式,主要是 ^、$、* 和括号的含义。 - Esko-
是错误的。需要放在字符类的末尾。而且大多数反斜杠是不必要的。 - Tim Pietzcker接受的答案存在安全漏洞:
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]*$
这将为空字符串生成真实的响应,因为*
代表0次或多次出现。
下面是更安全的版本:
^[\s\da-zA-ZåäöÅÄÖ&()+%/*$€é,.'"-]+$
+
表示至少出现1次,当匹配到1次或多次时返回true。PHP有各种函数可以帮助进行文本验证。您可能会发现它们比直接使用正则表达式更合适。考虑使用strip_tags()
, htmlspecialchars()
, htmlentities()
。
此外,如果您正在运行>PHP5.2,您可以使用出色的Filter函数,这些函数专为您的情况而设计。
^[\sa-zA-Z0-9åäö&()+%/*$€é,.'"-]*$
将匹配所有必需的字符。
在PHP中:
if (preg_match('#^[\sa-zA-Z0-9åäö&()+%/*$€é,.\'"-]*$#i', $subject)) {
# Successful match
} else {
# Match attempt failed
}