6

我做了这个正则表达式:

^[a-zA-Z0-9_.-]*$

支持:

letters [uppercase and lowercase]
numbers [from 0 to 9]
underscores [_]
dots [.]
hyphens [-]

现在,我想添加这些:

spaces [ ]
comma [,]
exclamation mark  [!]
parenthesis [()]
plus [+]
equal [=]
apostrophe [']
double quotation mark ["]
at [@]
dollar [$]
percent [%]
asterisk [*]

例如,此代码仅接受上面的一些符号:

^[a-zA-Z0-9 _.,-!()+=“”„@"$#%*]*$

回报:

警告:preg_match():编译失败:偏移 16 处的字符类范围乱序

4

5 回答 5

21

Make sure to put hyphen - either at start or at end in character class otherwise it needs to be escaped. Try this regex:

^[a-zA-Z0-9 _.,!()+=`,"@$#%*-]*$

Also note that because * it will even match an empty string. If you don't want to match empty strings then use +:

^[a-zA-Z0-9 _.,!()+=`,"@$#%*-]+$

Or better:

^[\w .,!()+=`,"@$#%*-]+$

TEST:

$text = "_.,!()+=,@$#%*-";
if(!preg_match('/\A[\w .,!()+=`,"@$#%*-]+\z/', $text)) {
   echo "error.";
}
else {
   echo "OK.";
}

Prints:

OK.
于 2013-09-06T14:18:04.063 回答
4
于 2013-09-06T14:27:19.283 回答
3

尝试转义你的正则表达式:[a-zA-Z0-9\-\(\)\*]

检查这是否对您有帮助:如何使用 javascript 转义正则表达式特殊字符?

于 2013-09-06T14:16:45.743 回答
2

在字符类[...]中,连字符-具有特殊含义,除非它是第一个或最后一个字符,因此您需要对其进行转义:

^[a-zA-Z0-9 _.,\-!()+=“”„@"$#%*]*$

其他字符都不需要在字符类中转义(除了])。您还需要转义指示字符串的引号。例如

'/[\']/'
"/[\"]/"
于 2013-09-06T14:20:47.913 回答
0

尝试这个

^[A-Z0-9][A-Z0-9*&!_^%$#!~@,=+,./\|}{)(~`?][;:\'""-] {0,8}$

使用此链接进行测试

诀窍是我倒序排列了括号和其他解决了一些问题的括号。对于方括号,您必须避开它们

于 2015-09-09T13:57:19.167 回答