-5

次の名前について、Java で正規表現を書くのを手伝う必要があります。

name
name`s
name name
name-name
name`s name
name`s-name

次の正規表現を書き込もうとしましたが、うまくいきません:(

String  nameRegex = "[A-Za-z]+(-|,|\\s)?[A-Za-z]*";

次の関数を書きます

 public static boolean validateName(String val) {
    logger.info("in validate number");
    String  numberRegex = "^[A-Za-z]+(-\\s)?[A-Za-z]+$";

    if (val.matches(numberRegex)) {
        logger.info("in validate name of method validate");
        return true;
    } else {
        logger.info("in else  of method validate");
        return false;
    }
}

その検証は次のとおりです。

  1. name false それは true である必要があります
  2. 123 真偽 であるべき
  3. abc022 true それは false であるべきです
  4. abc dsf 真
  5. abc-dsf true
  6. abc'-dsf true それは false であるべきです

私の与えられたパターンは満足していません。

このパターンの"^\p{L}+(?:[-,\s`]\p{L}+)*$"終了名をスペースなしで使用すると、false が返されます。数字を含む名前も受け付けています.eg abc123

4

1 に答える 1

0
  1. 選択肢のリストに「`」がありません。

  2. 交互に 1 文字しかない場合は、文字クラスを使用します。

  3. 完全な最後の部分を 0 回以上一致させる必要があります。

  4. [a-zA-Z]名前を一致させるには非常に悪い選択です。名前に ASCII 以外の文字が含まれている貧しい人々はどうしたのでしょうか? 代わりに使用\p{L}してください。

したがって、正規表現は次のようになります

^\\p{L}+(?:[-,\\s`]\\p{L}+)*$

\p{L}プロパティ「文字」を持つ単一の Unicode コード ポイントに一致する Unicode コード プロパティです ==>任意言語の任意の種類の文字に一致します

私はアンカーも使用^$ましたが、私のソリューションでは、必要かどうかにかかわらず、使用するメソッドに依存します。正規表現をどのように呼び出すか、コードを表示してください。

于 2012-08-15T07:30:56.267 に答える