我正在尝试让这个正则表达式来验证一个仅允许A - Z,‘和-的Name字段。
到目前为止,我正在使用这个,除了它不允许撇号之外,它工作得很好。
if (preg_match("/[^a-zA-Z'-]+/",$firstname)) {
// do something
}我希望它只允许A-Z,-(破折号)和一个‘(撇号)。它适用于A-Z和-但仍然不适用于‘
有没有人能举个例子?
谢谢
发布于 2011-09-12 17:01:22
if (preg_match("/^[A-Z'-]+$/",$firstname)) {
// do something
}字符类[]中的插入符号^将取消匹配。按照您的方式,这意味着如果$firstname包含a-z、A-Z、'和-以外的字符。
发布于 2011-09-12 17:07:23
你的代码已经完成了你想要做的事情:
<?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: $@#$%@#$%&*(*&){}//;;单引号在正则表达式中没有任何特殊含义,因此不需要特殊处理。在[]中,减号(-)表示范围;如果需要文字-,它必须是第一个或最后一个字符,就像在代码中一样。
话虽如此,错误(如果有的话)在其他地方。
发布于 2011-09-12 16:59:51
"/[^a-zA-Z'-]+/"实际上匹配除a-zA-z'-之外的所有内容,如果您将^放入以指示字符串的开头,则应将其放在括号外。此外,表达式的'-部分可能被解释为范围,因此您应该在@Tom回答时转义-,或者在其他人回答时转义,
https://stackoverflow.com/questions/7385420
复制相似问题