使EditText字段仅接受Android中的字母和空格

时间:2014-09-26 10:18:49

标签: java android

我的项目中有一个EditText字段,代表该人的全名。所以我只想在其中允许使用字母和空格。所以我在XML文件中尝试了以下内容

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "

但它不起作用。任何人都可以告诉我该怎么做?

10 个答案:

答案 0 :(得分:18)

试试这个:

EditText yourEditText = (EditText) findViewById(R.id.yourEditText);
yourEditText.setFilters(new InputFilter[] {
    new InputFilter() {
        @Override
        public CharSequence filter(CharSequence cs, int start,
                    int end, Spanned spanned, int dStart, int dEnd) {
            // TODO Auto-generated method stub
            if(cs.equals("")){ // for backspace
                 return cs;
            }
            if(cs.toString().matches("[a-zA-Z ]+")){
                 return cs;
            }
            return "";
        }
    }
});

答案 1 :(得分:9)

以下更改对我有用: -

if ($_SERVER["REQUEST_METHOD"] == "POST")
            {
                $product_name = $_POST['p_name'];
                $product_description = $_POST['p_description'];
                $category_ = $_POST['category-selected'];
                $price = $_POST['p_price'];
                $front = $_POST['front-image'];
                $back = $_POST['back-image'];
                $name_err = "";

                if(empty($name_err))
                { 
                    $sql = "INSERT INTO product (categoryID, product_name, product_description, price, picture_front, picture_back) VALUES (?, ?, ?, ?, ?, ?)";

                    if ($stmt = $mysqli->prepare($sql))
                    {
                        $stmt->bind_param("issdbb", $pmt_category, $pmt_name, $pmt_description, $pmt_price, $pmt_imagef, $pmt_imageb);

                        $pmt_category = $category;
                        $pmt_name = $product_name;
                        $pmt_description = $product_description;
                        $pmt_price = $price;
                        $pmt_imagef = $front;
                        $pmt_imageb = $back;

                        if ($stmt->execute())
                        {
                            echo "<script>alert('INSERTED SUCCESSFULLY');</script>";
                            exit();
                        }
                        else 
                        {
                            echo "<script>alert('FAILED TO INSERT');</script>";
                        }
                    }
                    $stmt->close();
                }
                $mysqli->close();
            }

在字符串之间放置空格。如果你在一个字符串的末尾放置空格,它将被自动修剪掉。

我在小写字母结尾后以大写字母开头使用了空格。

答案 2 :(得分:4)

试试这个

android:digits="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"

在字符串之间放置空格。如果你在一个字符串的末尾放置空格,它将被自动修剪掉。

我在小写字母结尾和大写字母开头后使用了空格

答案 3 :(得分:3)

在EditText标记中添加此行。

  

机器人:位数=&#34; abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&#34;

您的EditText标记应如下所示:

<EditText
        android:id="@+id/edt"
        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

它完美无缺,无需验证条件


更新1

正则表达式 src.toString().matches("[a-zA-Z ]+")


更新2

如果情况确实如此,则只需在两者之间添加空间即可。

  

android:digits =&#34; abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ&#34;

答案 4 :(得分:2)

出于某种原因,包括&#34; \ n&#34;不能发生在字符串的末尾,我搜索了谷歌文档,大多数没有发现。实现空格和换行的唯一方法是在字符串的中间。请参阅我在其中一个应用中使用的示例。

android:digits="aãâáàbcçdeéfghiíjklmnoõôóòpqrstuvwxyzAÃÂÁÀBCÇDEÉFGHIÍJKLMNOÕÔÓÒPQRSTUVWXYZ1234567890@-_'+=(){}[]*%$#!?,.;\n: /?\\"

答案 5 :(得分:1)

layout.xml

中使用以下内容
<EditText android:inputType="textPersonName" />

答案 6 :(得分:1)

请在下面的字符串之间放置空格,它是工作代码。

 android:digits="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ "

答案 7 :(得分:0)

使用正则表达式.. 模式应该是

Full_Name_Pattern = "[A-Z][a-z]+( [A-Z][a-z]+)*";

答案 8 :(得分:0)

这对我有用(中间的空白,而不是最后) android:digits =&#34; abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ&#34;

答案 9 :(得分:0)

尝试此解决方案,它会阻止输入数字,空格以外的特殊字符。

editText.setFilters(new InputFilter[] {
   new InputFilter() {
   @Override
   public CharSequence filter(CharSequence cs, int start,
       int end, Spanned spanned, int dStart, int dEnd) {

   return cs.toString().replaceAll("[^a-zA-Z ]*","");
    }
    }
});

科林版:

editText.filters = arrayOf(
            InputFilter { source, start, end, dest, dstart, dend ->
                return@InputFilter source.replace(Regex("[^a-zA-Z ]*"), "")
            }
        )