10

フルネームの正規表現を検証するにはどうすればよいですか? 正規表現にはアルファベットのみ(数字なし)とスペースのみが必要です。これは私がこれまで行ってきたことです。正規表現を修正するのを手伝ってくれませんか? どうもありがとうございました

public static boolean isFullname(String str) {
    boolean isValid = false;
    String expression = "^[a-zA-Z][ ]*$"; //I know this one is wrong for sure >,<
    CharSequence inputStr = str;
    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        isValid = true;
    }
    return isValid;
}
4

6 に答える 6

22

名前を識別するというこの問題は、非常に文化中心であり、確実に機能する見込みはありません。私が知っている地球上のどこの国でも、人の名前を構成するための標準的な形式は存在しないため、これには反対することを強くお勧めします. 合法的に自分の名前を に変更できますが#&*∫Ω∆ Smith、それは誰のアルゴリズムにも適合しません。この特定の例は、多くの人が行うことではありませんが、多くの人は、データ入力を検討するときに ASCII テーブルの外側を考えないため、問題が発生します。

これが起こる可能性について反論することはできますが、グローバルな世界では、すべてのユーザーが名前の綴りを英語に変換する可能性はますます低くなります。また、姓名の概念がない文化圏のユーザーがいる可能性も十分にあります。アプリケーションが特定の国でのみ実行されている場合でも、一部のユーザーは他の場所から来ていないと仮定しないでください (人々は常に国から国へと移動しており、一部のユーザーはあなたのソフトウェア)。

このようなフィールド (これらを DB に格納している場合) に対する SQL インジェクションからアプリを保護し、そのままにしておきます。

于 2011-09-09T14:25:28.863 に答える
1

[A-Z]単一の大文字 (名前の最初の文字) に一致

[a-z]*任意の数の小文字 (その他の文字または名前) に一致

(\s)1 つの空白文字 (名前の間のスペース) に一致

+前の式の 1 つまたは複数 (複数の名前に一致するため)

すべて一緒に:

- matches first names / lastname -
^([A-Z][a-z]*((\s)))+[A-Z][a-z]*$

または、DiMaggio St. Croix、O'Reilly、Le-Pew などの名前に一致するようにします。MᶜKinley の 'ᶜ' のような類似の文字を覚えている場合や、あまり一般的ではない文字が名前に含まれている人に出くわした場合は、これらの文字を追加できます。

^([A-z\'\.-ᶜ]*(\s))+[A-z\'\.-ᶜ]*$

于 2011-09-09T13:53:03.273 に答える
-2
public static boolean isFullname(String str) {
    return str.matches("^[a-zA-z ]*$");
}

文字列にアルファベットとスペースのみが含まれている場合、このメソッドはtrueを返します。

ただし、文字列に何も含まれていない場合もtrueを返します。

于 2011-09-09T13:53:50.540 に答える
-2

\sスペースに使用します。String.matches(regex)文字列が正規表現と一致するかどうかをテストするために使用することもできます。

public static boolean isFullname(String str) {
    String expression = "^[a-zA-Z\\s]*$"; 
    return str.matches(expression);        
}
于 2011-09-09T13:54:15.543 に答える