2017-10-18 7 views
-1

Im正規表現を構築するのに良い。 なぜあなたに尋ねているのです! :)だから、文字の範囲内の姓の正規表現

、イムは、例えば、姓の先頭を表す文字の範囲での作業:私はフィットはRegexかを知る必要がある理由の範囲のすべてが特定のプロセスのために立つ

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

は、thatsの姓に。

姓「アルバート」は正規表現#3に適合し、「キオト」は#2に適合します。 私はあなたに合っていることを望みます。

正規表現は、 "Bauer-Schmidt"のような範囲を処理するのに十分複雑である必要もあります。

私は本当にあなたの助けが必要です!

+0

本当に正規表現の問題ではありません...代わりに、各間隔の下限と上限の境界と単純な文字列比較を使用する必要があります。 – CBroe

+0

しかし、定義されたパラメータの間にある範囲とはどのように比較できますか?たとえば、「Ab-De」などです。どのように私は "Co"で始まる私のラストネームを比較できますか? – h00ligan

+0

あなたが正確に何を必要としているか詳しく調べることができますか?2文字で始まり2文字で終わるすべての姓をフィルタリングする必要がありますか?質問は – msoliman

答えて

1

本当に最初にregexを使うべきではないという問題はありません...代わりに、各間隔の下限と上限の境界と単純な文字列比較を使用してください。

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"のみを含む範囲がある場合にも機能しますか? これはまた、 "Alz"という名前の "Button"という名前を与えますが、ルールに適合しません。 – h00ligan

+0

境界が1つしかない範囲を意味するので、対応する配列エントリの要素は1つだけですか?いいえ、それはうまくいきません。それを確認するコードを変更しない限りです。しかし、本当にそれが必要ですか?範囲内のより大きいすべてのもの、例えば 'Foo'を捕まえたいなら、あなたは単に' Z'を上限にすることができます。 – CBroe

+0

「Ki-Kj」に適合する姓「Kjooto」を使用すると、あなたのコードは機能しません。 – h00ligan

0

私はあなたが求めて正確に何かわからないが、私が理解することは、これはアルにアルバートようにあなたを与えるだろう、この

[a-zA-Z]{2} 

好きです。 そして、あなただけ大文字にしたい場合:

[A-Z]{2} 

あなたが正確に何をしたいコメントを解放してください。 ありがとう

関連する問題