我正在尝试让这个正则表达式来验证一个仅允许A - Z,‘和-的Name字段。
到目前为止,我正在使用这个,除了它不允许撇号之外,它工作得很好。
if (preg_match("/[^a-zA-Z'-]+/",$firstname)) {
            // do something
        }我希望它只允许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: $@#$%@#$%&*(*&){}//;;单引号在正则表达式中没有任何特殊含义,因此不需要特殊处理。在[]中,减号(-)表示范围;如果需要文字-,它必须是第一个或最后一个字符,就像在代码中一样。
话虽如此,错误(如果有的话)在其他地方。
https://stackoverflow.com/questions/7385420
复制相似问题