表单输入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
相关产品推荐
相关产品推荐

