正则表达式允许A-Z, - 和'

时间:2011-09-12 08:57:33

标签: php regex preg-match

我试图让这个正则表达式工作以验证名称字段只允许A-Z,'和 - 。

到目前为止,我正在使用它,除了它不会允许撇号工作正常。

if (preg_match("/[^a-zA-Z'-]+/",$firstname)) {
            // do something
        }

我希望它只允许A-Z, - (破折号)和'(撇号)。它适用于A-Z和 - 但仍然无法用于'

有人可以提供一个例子吗?

由于

6 个答案:

答案 0 :(得分:2)

if (preg_match("/^[A-Z'-]+$/",$firstname)) {
    // do something
}

角色类^内的插入符[]将取消匹配。如果$firstname包含a-zA-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
}

我已经用过了,这可以正常工作。用它。