2017-10-18 87 views
-1

我不擅长构建正则表达式。 这就是为什么我问你! :)字母范围内的姓氏正则表达式

因此,即时通讯与立为姓氏的开头,例如字母范围工作:

1: X-Y 
2: Ki-Kj 
3: Al-Bkz 

范围都代表一个特定的过程,这就是为什么我需要知道哪些正则表达式拟合姓氏。

姓氏“Albert”适合正则表达式#3,“Kioto”适合于#2。 我希望这对你有意义。

正则表达式还需要足够复杂才能处理像“Bauer-Schmidt”这样的范围。

我真的很需要你的帮助!

+0

真的不是一个正则表达式问题...您应该使用简单的字符串比较每个区间的上限和下限。 – CBroe

+0

但是我怎样才能比较定义的参数之间的范围?例如“Ab-De”。我如何比较以“Co”开头的姓氏? – h00ligan

+0

您能详细说明一下您需要的吗?您是否需要过滤所有以几个字母开头并以几个字母结尾的姓氏,请更新您的问题 – msoliman

回答

1

真的不是你应该首先使用正则表达式的问题...使用简单的字符串比较每个间隔的上限和下限。

function check_name_in_range($name) { 
    $ranges = [ 
    1 => ['X', 'Y'], 
    2 => ['Ki', 'Kj'], 
    3 => ['Al', 'Bkz'], 
    ]; 
    foreach($ranges as $rangeNum => $range) { 
    if(substr($name, 0, strlen($range[0])) >= $range[0] && 
     substr($name, 0, strlen($range[1])) <= $range[1]) { 
     return $name. ' falls into range ' . $rangeNum; 
    } 
    } 
    return $name. ' does not fall into any range'; 
} 

var_dump(
    check_name_in_range('Albert'), 
    check_name_in_range('Kjooto'), 
    check_name_in_range('FitsEffAll') 
); 

你可能婉比较之前为小写字母所有相关的字符串,使A/a不会成为一个问题,因为这些相等。

+0

如果我的范围只包含开始“Alz”,这是否也工作? 或者这也给我的名字“按钮”是> =阿尔茨,但不符合规则。 – h00ligan

+0

你的意思是只有一个边界的范围,所以在相应的数组条目中只有一个元素?不,那不行,除非你修改代码来检查。但你真的需要吗?如果你想抓住每一个更大的东西,比如在一定范围内说'Foo' - 那么你可以简单地把'Z'作为上边界。 – CBroe

+0

如果我把姓氏“Kjooto”,应该适合“Ki-Kj”您的代码不起作用。 – h00ligan

0

我不知道你问什么了,但我了解做这样

[a-zA-Z]{2} 

这会给你喜欢艾伯特人。 如果你只想要大写字母,则:

[A-Z]{2} 

请自由评论你到底想要什么。 谢谢