【问题标题】:PHP Regular Expression. Check if String contains ONLY lettersPHP 正则表达式。检查字符串是否只包含字母
【发布时间】:2010-04-24 08:40:50
【问题描述】:

在 PHP 中,如何检查字符串是否只包含字母?我想编写一个 if 语句,如果存在(空格、数字、符号)或除a-zA-Z 之外的任何其他内容,则该语句将返回 false。

我的字符串必须只包含字母。

我以为我可以这样做,但我做错了:

if( ereg("[a-zA-Z]+", $myString))
   return true;
else
   return false;

如何确定myString 是否只包含字母?

【问题讨论】:

  • 那不是 Java。你可能指的是 PHP。
  • 为什么是正则表达式? ctype_alpha($myString);

标签: php regex string


【解决方案1】:

是的,这很好用。谢谢

if(myString.matches("^[a-zA-Z]+$"))

【讨论】:

    【解决方案2】:

    从未听说过ereg,但我猜它会匹配子字符串。

    在这种情况下,您希望在正则表达式的任一端包含锚点,以便强制匹配整个字符串:

    "^[a-zA-Z]+$"
    

    另外,你可以简化你的阅读功能

    return ereg("^[a-zA-Z]+$", $myString);
    

    因为 if 从已经是布尔值返回 truefalse 是多余的。


    或者,您可以匹配任何字母的字符,并返回结果的补码:

    return !ereg("[^a-zA-Z]", $myString);
    

    注意字符集开头的^,它会反转它。另请注意,您不再需要+,因为单个“坏”字符会导致匹配。


    最后...此建议适用于 Java,因为您的问题上有一个 Java 标记。但是$myString 中的$ 让您看起来像是在处理Perl 或PHP?一些澄清可能会有所帮助。

    【讨论】:

    • 请注意,ereg 自 PHP 5.3 起已弃用。请改用preg_match
    【解决方案3】:

    您的代码类似于PHP。如果字符串中有一个字母,它将返回true。为确保字符串只有个字母,您需要使用开始和结束anchors

    Java 中,您可以使用String 类的matches 方法:

    boolean hasOnlyLetters(String str) {
       return str.matches("^[a-zA-Z]+$");
    }
    

    PHP 中,函数ereg 现在已弃用。您需要使用preg_match 作为替换。与上述函数等效的PHP 是:

    function hasOnlyLetters($str) {
       return preg_match('/^[a-z]+$/i',$str);
    }
    

    【讨论】:

      【解决方案4】:

      我要与众不同,用Character.isLetter定义什么是字母。

      if (myString.matches("\\p{javaLetter}*"))
      

      请注意,这不仅仅匹配 [A-Za-z]*

      如果字符的一般类别类型(由Character.getType(ch) 提供)为以下任何一种,则该字符被视为字母:UPPERCASE_LETTER、LOWERCASE_LETTER、TITLECASE_LETTER、MODIFIER_LETTER、OTHER_LETTER

      并非所有字母都有大小写。许多字符是字母,但既不是大写也不是小写,也不是标题。

      \p{javaXXX} 字符类在Pattern API 中定义。

      【讨论】:

        【解决方案5】:

        或者,尝试检查它是否包含字母以外的任何内容:[^A-Za-z]

        【讨论】:

          【解决方案6】:

          执行“是给定类型的所有字符”的最简单方法是检查是否有任何字符不属于该类型。

          因此,如果 \W 表示非字符,则只需检查其中一个。

          【讨论】:

          • 一般情况下是正确的,但在 Java 中,由于 matches() 方法的隐式锚定,通常以另一种方式更容易做到这一点。所以是s.matches("\\w+") vs !s.matches(".*\\W.*")
          猜你喜欢
          • 1970-01-01
          • 2014-03-30
          • 1970-01-01
          • 2018-08-20
          • 2011-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多