6

为我糟糕的英语道歉,我正在使用谷歌翻译。

我正在创建一个用户必须在其中创建新配置文件的活动。我限制编辑 15 个字符的文本,如果新的配置文件名称包含空格或特殊字符,我希望显示警告。作为在线视频游戏

以下代码可帮助我检测空格,但不能检测特殊字符。

我需要帮助来识别特殊字符并显示警告作为响应。

@Override
public void onClick(View v) {
    //Convertimos el contenido en la caja de texto en un String
    String nombre = nombreUsuario.getText().toString();

    //Si el tamaño del String es igual a 0, que es es lo mismo que dijeramos "Si esta vacio"
    if (nombre.length() == 0) {
        //Creamos el aviso
        Toast aviso = Toast.makeText(getApplicationContext(), "Por favor introduce un nombre de Usuario", Toast.LENGTH_LONG);
        aviso.show();

    } else if (nombre.contains(" ") | nombre.contains("\\W")) {
        Toast aviso = Toast.makeText(getApplicationContext(), "No son permitidos los espacios ni los caracteres especiales", Toast.LENGTH_LONG);
        aviso.show();
    } else {
        nombre = nombreUsuario.getText().toString();
        //Conectamos con la base de datos
        //Creamos un bojeto y lo iniciamos con new
        Plantilla entrada = new Plantilla(CrearUsuarioActivity.this);
        entrada.abrir();

        //creamos un metodo para escribir en la base de datos (crear entradas)
        entrada.crearEntrada(nombre);
        entrada.cerrar();
    }
}
4

6 回答 6

22

您可以使用:

string.matches("[a-zA-Z.? ]*")

如果字符串中的每个字符都是小写字母 az、大写字母 AZ、句点、问号或空格,则计算结果为 true。

喜欢:

public void Click(View v) {
        if (v.getId() == R.id.button1) {
            String nombre = textMessage.getText().toString();
            if (nombre.length() == 0) {

                // Creamos el aviso
                Toast aviso = Toast.makeText(getApplicationContext(),
                        "Por favor introduce un nombre de Usuario",
                        Toast.LENGTH_LONG);
                aviso.show();

            } else if (!nombre.matches("[a-zA-Z.? ]*")) {
                Toast aviso = Toast
                        .makeText(
                                getApplicationContext(),
                                "No son permitidos los espacios ni los caracteres especiales",
                                Toast.LENGTH_LONG);
                aviso.show();

            } else {

                // Do what ever you want
            }

        }
    }

允许 az、AZ、0-9 使用"[a-zA-Z0-9.? ]*"

于 2013-04-23T04:58:59.403 回答
3

在 xml 文件的 edittext 中使用以下行,以便它只输入字母和数字;

 android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

如果您需要动态响应,请使用 textwatcher 作为您的编辑文本;

   yourEditText.addTextChangedListener(new TextWatcher() {

      public void afterTextChanged(Editable s) {

       // Here you need to check special character, if found then show error message

      if (s.toString().contains("%"))
      {
           // Display error message
      }

      public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

      public void onTextChanged(CharSequence s, int start, int before, int count) {}
   });
于 2015-05-04T11:34:45.767 回答
3

如果您想获取特殊字符并支持的不仅仅是非常严格的英文字母投注和数字集:

String edit_text_name = YourEditTextName.getText().toString();

Pattern regex = Pattern.compile("[$&+,:;=\\\\?@#|/'<>.^*()%!-]");

if (regex.matcher(edit_text_name).find()) {
        Log.d(TAG, "SPECIAL CHARS FOUND");
        //handle your action here toast message/ snackbar or something else
        return;
}
于 2017-02-28T14:11:56.103 回答
1

你应该选择Android Saripaar,这是一个非常轻量级和简单的 Android API。在您的情况下,您可以在 EditText 实例上执行以下操作...

@TextRule(order = 1, minLength = 15, message = "Enter atleast 15 characters.")
@Regex(order = 2, pattern = "[\\W+]", message = "Special characters are not allowed.")
private TextView yourEditText;

使用此 api 将引导您以正确的方式对您的验证过程进行更多控制。您也可以使用[^a-zA-Z0-9]代替[\\W+]作为您的调节器表达式模式。

希望这可以帮助..:)

于 2013-04-23T05:06:51.147 回答
1

由于我无法对其他帖子发表评论,因此我将补充投票最多的答案,并提供更时尚视觉分辨率的提示。

首先,将 Edittext (etNombre) 数据传递给 String 变量。前任:String nombre = etNombre.getText().toString();

然后,使用 if 来验证:

if (!nombre.matches("[a-zA-Z.? ]*")) {

    etNombre.setError("Your message here");

}

此解决方案将设置一个“!” Edittext 上的图标,它比 Toast 好得多,因为消息将用户指向错误。

于 2018-11-19T15:30:23.237 回答
-1

利用:

public void click (View view) {

    if (edittext.matcher(abcd).find ()) {
       Toast.maketext(this, "abcd Found", TOAST.LENGTH_LONG).show ();
    }

}
于 2018-05-31T18:21:51.100 回答