正则表达式仅接受字母和空格,并且在字符串的开头和结尾不允许使用空格

问题描述

对我而言,唯一可行的方法是:

^\p{L}+(?: \p{L}+)*$

在字符串的开头,必须至少有一个字母。(我用[a-zA-Z]Unicode代码属性替换了letter\p{L})。然后可以有一个空格,后跟至少一个字母,此部分可以重复。

\p{L}:来自任何语言的任何形式的信件。见regular-expressions.info

表达式中的问题^(?!\s*$)是,如果 只有空格,则超前操作将失败。如果要禁止前导空格,只需删除lookahead ==>中字符串锚的末尾^(?!\s)[-a-zA-Z ]*$。但这仍然允许字符串以空格结尾。为避免这种情况,请回头看字符串的结尾^(?!\s)[-a-zA-Z ]*(?<!\s)$。但我认为对于此任务,无需四处看看。

解决方法

验证输入字段具有以下要求:

  1. 它只能包含字母以及字母之间的空格。
  2. 它不能在字符串的开头或结尾包含空格。
  3. 它不能包含任何其他特殊字符。

我为此使用以下正则表达式:

^(?!\s*$)[-a-zA-Z ]*$

但这是在开始时留有空格。任何帮助表示赞赏。

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”