[英]Check if string contains only lowercase letters and underscores
我想检查给定的字符串是否只包含小写字母和下划线。 它不能包含空格、数字、大写字母或特殊符号/字符。
my_name_is_John_Doe
= 失败(无大写)my_name_is john doe
= 失败(无空格)my_name_is_john_doe
= 好的i_am_20_years_old
= 失败(无数字)i'm_cool!
失败(没有像这样的字符:."#$%&/,.等) 一条额外规则:没有重音/多字节字母,如ä
、 ö
等。
您可以使用preg_match()
或非正则表达式方法来删除所有列入白名单的字符并检查是否有剩余字符。
代码:(演示)
$strings = [
'my_name_is_John_Doe',
'my_name_is john doe',
'my_name_is_john_doe',
'i_am_20_years_old',
"i'm_cool!"
];
foreach ($strings as $string) {
echo json_encode([
$string,
!strlen(ltrim($string, 'a..z_')),
!preg_match('/[a-z_]*[^a-z_]/', $string)
]);
echo "\n\n";
}
Output:
["my_name_is_John_Doe",false,false]
["my_name_is john doe",false,false]
["my_name_is_john_doe",true,true]
["i_am_20_years_old",false,false]
["i'm_cool!",false,false]
在步骤性能方面,这里是每个提供的示例字符串的工作模式表:
细绳 | 匹配 /^[a-z_]+$/ |
不匹配 /[^a-z_]/ |
不匹配 /.*[^a-z_]/ |
不匹配 /[a-z_]*[^a-z_]/ |
---|---|---|---|---|
my_name_is_John_Doe | 13 | 13 | 6个 | 3个 |
我的名字是约翰·多伊 | 12 | 12 | 7 | 3个 |
my_name_is_john_doe | 4个 | 20 | 23 | 40 |
我20岁了 | 7 | 7 | 14 | 3个 |
我很酷! | 3个 | 3个 | 4个 | 3个 |
上表纯属学术提供。 在如此小的输入字符串上,任何性能提升或损失对于人类最终用户来说都是无法区分的。 换句话说,此任务不太可能成为您应用程序的性能瓶颈,因此请选择您理解并可以维护的技术。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.