DBには、「(731)123-4567」、「731-123 45 67」、「731-12-3- [4567]」など、さまざまな形式の携帯電話番号を含めることができます
。検索用のAPIでは、任意の形式にすることができます。
したがって、dbでモバイルを使用しているユーザーを見つける必要がある場合は、入力番号をクリーンアップして「7311234567」のようになり、正規表現でラップ/パディング'(\\+|\\-|\\(|\\)|\\[|\\]| )*'
します。たとえば、SQLは次のようになります。
select * from contact where mobile REGEXP '(\\+|\\-|\\(|\\)|\\[|\\]| )*
1(\\+|\\-|\\(|\\)|\\[|\\]| )*7(\\+|\\-|\\(|\\)|\\[|\\]| )*
3(\\+|\\-|\\(|\\)|\\[|\\]| )*1(\\+|\\-|\\(|\\)|\\[|\\]| )*
2(\\+|\\-|\\(|\\)|\\[|\\]| )*9(\\+|\\-|\\(|\\)|\\[|\\]| )*
8(\\+|\\-|\\(|\\)|\\[|\\]| )*0(\\+|\\-|\\(|\\)|\\[|\\]| )*
7(\\+|\\-|\\(|\\)|\\[|\\]| )*4(\\+|\\-|\\(|\\)|\\[|\\]| )*
0(\\+|\\-|\\(|\\)|\\[|\\]| )*';
問題は、「7311234567」のような「11234567」のような入力を取得したが、「73」がない場合(クエリの実行時)、「7311234567」のユーザーも検出されることです。
質問:正規表現で完全な数だけに収まるように、正規表現をより適切にラップするにはどうすればよいですか?