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

问题描述 投票:0回答:6

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

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

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

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

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

谢谢

php regex preg-match
6个回答
2
投票
if (preg_match("/^[A-Z'-]+$/",$firstname)) {
    // do something
}

角色类^中的插入符号[]将否定该匹配。你拥有它的方式,这意味着如果$firstname包含a-zA-Z'-以外的字符。


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: $@#$%@#$%&*(*&){}//;;

单引号在正则表达式中没有任何特殊含义,因此不需要特殊处理。减号(-),当在[]内时,意味着范围;如果您需要文字-,它必须是第一个或最后一个字符,如在您的代码中。

说,错误(如果有的话)是其他地方。


1
投票

"/[^a-zA-Z'-]+/"实际上匹配除了a-zA-z'-之外的所有东西,如果你把^放在表示字符串的开头,你应该把它放在括号之外。此外,你的表达的'-部分可能被解释为一个范围,所以你应该逃脱- @Tom回答或逃脱,,因为其他人回答


1
投票

从我所看到的。以下正则表达式应该正常工作:

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

在这里,我已经逃脱了撇号和破折号。我已经在在线Regex测试仪上对此进行了测试,效果很好。

试试看


0
投票

你的正则表达式应如下所示:

preg_match("/^[A-Z\'-]+$/",$firstname);

maches:AB A-B AB-'

不匹配:Ab a-B AB# <empty string>


0
投票
if (preg_match("/^[a-zA-Z -]*$/", $firstname)) {
    // do something here
}

我用过这个,这样可以。用它。

© www.soinside.com 2019 - 2024. All rights reserved.