我试图让这个正则表达式工作以验证名称字段只允许A-Z,'和 - 。
到目前为止,我正在使用它,除了它不会允许撇号工作正常。
if (preg_match("/[^a-zA-Z'-]+/",$firstname)) {
// do something
}
我希望它只允许A-Z, - (破折号)和'(撇号)。它适用于A-Z和 - 但仍然无法用于'
有人可以提供一个例子吗?
由于
答案 0 :(得分:2)
if (preg_match("/^[A-Z'-]+$/",$firstname)) {
// do something
}
角色类^
内的插入符[]
将取消匹配。如果$firstname
包含a-z
,A-Z
,'
和-
以外的其他字符,则表示拥有它的方式。
答案 1 :(得分:2)
您的代码已经按照您的要求执行:
<?php
$data = array(
// Valid
'Jim',
'John',
"O'Toole",
'one-two',
"Daniel'Blackmore",
// Invalid
' Jim',
'abc123',
'$@#$%@#$%&*(*&){}//;;',
);
foreach($data as $firstname){
if( preg_match("/[^a-zA-Z'-]+/",$firstname) ){
echo 'Invalid: ' . $firstname . PHP_EOL;
}else{
echo 'Valid: ' . $firstname . PHP_EOL;
}
}
...打印:
Valid: Jim
Valid: John
Valid: O'Toole
Valid: one-two
Valid: Daniel'Blackmore
Invalid: Jim
Invalid: abc123
Invalid: $@#$%@#$%&*(*&){}//;;
单引号在正则表达式中没有任何特殊含义,因此不需要特殊处理。在-
内,减号([]
)表示范围;如果您需要文字-
,则必须是第一个或最后一个字符,如代码中所示。
说,错误(如果有的话)就在别的地方。
答案 2 :(得分:1)
"/[^a-zA-Z'-]+/"
实际上匹配除a-zA-z'-
之外的所有内容,如果您将^ in表示为字符串的开头,则应将其放在括号内。
此外,表达式的'-
部分可能被解释为范围,因此您应该在@Tom回答时转义-
,或者在其他人回答时转义,
答案 3 :(得分:1)
从我看到的。以下正则表达式应该可以正常工作:
if (preg_match("/^[A-Z\'\-]+$/",$firstname)) {
// do something
}
在这里,我已经逃脱了撇号和破折号。我已经在在线Regex测试仪上对此进行了测试,效果很好。
试一试
答案 4 :(得分:0)
你的正则表达式应如下所示:
preg_match("/^[A-Z\'-]+$/",$firstname);
maches:AB
A-B
AB-'
不匹配:Ab
a-B
AB#
<empty string>
答案 5 :(得分:0)
if (preg_match("/^[a-zA-Z -]*$/", $firstname)) {
// do something here
}
我已经用过了,这可以正常工作。用它。