You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单输入Title Case格式验证及对应PHP正则替换需求

表单输入Title Case格式验证及对应PHP正则替换需求

嘿,我来帮你搞定这个Title Case的验证和替换需求!先明确你的核心要求:

  • 每个单词首字母必须为大写英文字母
  • 单词中除首字母外的其他字母必须小写
  • 数字和特殊字符可以出现在单词的非首字母位置,但不能作为单词的开头

先看你原来的HTML输入框正则,写得过于繁琐还存在语法错误,咱们换成更精准简洁的版本:

HTML 输入框验证正则

给你这个符合要求的pattern属性配置:

<input type="text" name="display_name" placeholder="Display Name" id="display_name" required minlength="1" maxlength="32"
pattern="^(?:[A-Z][a-z\d\W_]*(?:\s+[A-Z][a-z\d\W_]*)*)$">

正则细节解释:

  • ^ 和 $:锁定整个输入字符串,确保所有内容都符合规则
  • [A-Z]:强制单词首字母为大写英文字母,直接排除数字、特殊字符开头的情况
  • [a-z\d\W_]*:允许单词剩余部分包含小写字母、数字、特殊字符(\W匹配非字母数字的特殊字符,单独加_是因为\W不包含下划线),*表示这部分可以有0个或多个字符
  • (?:\s+[A-Z][a-z\d\W_]*)*:处理多个单词的情况,\s+匹配一个或多个空格作为分隔符,后面重复单个单词的规则,*表示可以有0个或多个后续单词

PHP 正则替换实现

如果你需要把用户输入的字符串自动转换成符合要求的格式,可以用preg_replace_callback来处理,既能保证首字母大写、其余字母小写,又能保留数字和特殊字符:

function formatTitleCase($str) {
    return preg_replace_callback(
        '/\b([A-Za-z])([A-Za-z\d\W_]*)\b/',
        function($matches) {
            // 首字母转大写,剩余部分转小写(数字和特殊字符不受转小写影响)
            return strtoupper($matches[1]) . strtolower($matches[2]);
        },
        $str
    );
}

// 测试示例
$testInput = "hELLO 123wORLD! foo_bar";
echo formatTitleCase($testInput); // 输出:Hello 123world! Foo_bar

替换逻辑说明:

  • \b:匹配单词边界,确保我们处理的是每个独立的单词
  • ([A-Za-z]):捕获单词的首字母(仅匹配字母,自动排除数字/特殊字符开头的情况)
  • ([A-Za-z\d\W_]*):捕获单词的剩余部分,包含字母、数字、特殊字符
  • 回调函数里将首字母转大写,剩余部分转小写,数字和特殊字符转小写后不会改变,所以能原样保留

如果需要先验证字符串是否符合规则,PHP可以用preg_match:

function isValidTitleCase($str) {
    return preg_match('/^(?:[A-Z][a-z\d\W_]*(?:\s+[A-Z][a-z\d\W_]*)*)$/', $str) === 1;
}

// 测试
var_dump(isValidTitleCase("Hello 123World!")); // bool(true)
var_dump(isValidTitleCase("hello World")); // bool(false) 第一个单词首字母小写
var_dump(isValidTitleCase("123Hello")); // bool(false) 单词开头为数字

备注:内容来源于stack exchange,提问作者Antarctica-UFO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:59:38