首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式允许A-Z,- and‘

正则表达式允许A-Z,- and‘
EN

Stack Overflow用户
提问于 2011-09-12 16:57:33
回答 6查看 7.8K关注 0票数 0

我正在尝试让这个正则表达式来验证一个仅允许A - Z,‘和-的Name字段。

到目前为止,我正在使用这个,除了它不允许撇号之外,它工作得很好。

代码语言:javascript
运行
复制
if (preg_match("/[^a-zA-Z'-]+/",$firstname)) {
            // do something
        }

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

有没有人能举个例子?

谢谢

EN

回答 6

Stack Overflow用户

发布于 2011-09-12 17:01:22

代码语言:javascript
运行
复制
if (preg_match("/^[A-Z'-]+$/",$firstname)) {
    // do something
}

字符类[]中的插入符号^将取消匹配。按照您的方式,这意味着如果$firstname包含a-zA-Z'-以外的字符。

票数 2
EN

Stack Overflow用户

发布于 2011-09-12 17:07:23

你的代码已经完成了你想要做的事情:

代码语言:javascript
运行
复制
<?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;
    }
}

..。打印:

代码语言:javascript
运行
复制
Valid: Jim
Valid: John
Valid: O'Toole
Valid: one-two
Valid: Daniel'Blackmore
Invalid:  Jim
Invalid: abc123
Invalid: $@#$%@#$%&*(*&){}//;;

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

话虽如此,错误(如果有的话)在其他地方。

票数 2
EN

Stack Overflow用户

发布于 2011-09-12 16:59:51

"/[^a-zA-Z'-]+/"实际上匹配除a-zA-z'-之外的所有内容,如果您将^放入以指示字符串的开头,则应将其放在括号外。此外,表达式的'-部分可能被解释为范围,因此您应该在@Tom回答时转义-,或者在其他人回答时转义,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7385420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档