【问题标题】:php regex allow only english characters in stringphp regex 只允许字符串中的英文字符
【发布时间】:2011-06-10 08:08:14
【问题描述】:

我只想在文本框中插入英文字符和其他特殊字符,例如

$!@{]{[

等等……

但我还想检查字符串是否包含至少 2 个字符:(a-zA-Z0-9)

所以我想到了这个:

preg_match('/[^a-zA-Z0-9 -"?()[]#:/\'_+*%@!~`$><,.;{}|\]/',$string)

这是一个好方法吗?

【问题讨论】:

  • 很好奇,你为什么想要那个?
  • 我有一个看起来像线程/ID/标题的 URL,我尽量不显示不必要的字符

标签: php regex preg-match character


【解决方案1】:

不,你的方法不好

试试这个。你需要把你想要的特殊字符填入字符类。您需要转义 ]\-^ 字符,因为它们在类中具有特殊含义(取决于它们的位置)。

^(?=.*[A-Za-z0-9].*[A-Za-z0-9])[$!@{}[\]A-Za-z0-9]*$

here on Regexr

第一部分是肯定的前瞻,确保您的[A-Za-z0-9] 要求的两个字符在字符串中的某个位置。

然后是字符类[A-Za-z0-9])[$!@\{\}\[\]A-Za-z0-9],您可以在其中输入要匹配的字符。

我的表达式开头的 ^ 确保它从开头匹配,末尾的 $ 确保它匹配字符串的结尾。

示例开头的^ 是对完整字符类的否定,我猜你不想要什么,如果你想匹配字符^ 将它放在类中的其他位置。你班级中间的- 定义了一个匹配来自-" 的所有字符的字符范围,我不知道是什么字符,但可能比你想要的更多。将- 放在开头或结尾或转义。

【讨论】:

  • 谢谢,当我尝试输入例如“这是一个测试文本(测试文本)等”时,它会显示为无效
  • 将空格和圆括号放入字符类中,它会匹配
  • 我对其进行了编辑,现在看起来像这样:/^(?=.*[A-Za-z0-9 ].*[A-Za-z0-9 ])[ $!@(){\}[]A-Za-z0-9 ]*$/ 但如果我想添加逗号或问号或其他内容,我必须将它们添加到括号中...我希望能够写任何东西,除非它至少有 2 个 a-zA-Z0-9 字符或它不是垃圾邮件文本
  • @fxuser 我现在应该怎么做“垃圾短信”?你能给出清楚的例子,你想匹配什么,什么不匹配(请作为可以放入测试工具的字符串列表)。
  • 我改变了我将如何做,我将允许所有字符并简单地替换我不想要的那些...谢谢你的帮助
【解决方案2】:
(?:.*?[0-9a-zA-Z]){2,}[0-9a-zA-Z$!@{\]{\[]*

【讨论】:

    【解决方案3】:
    $parameter ='(a-zA-Z){2}';
    if $string='kasdfhk890';
    
    preg_match($string,$parameter); // 
    return false;
    
    if $string='k';
    
    
    preg_match($string,$parameter); // single char error
    return false;
    
    if $string='kuyyee';
    
    preg_match($string,$parameter);// english character only
    return true;
    

    You want learn more try this link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2022-01-24
      • 2011-10-31
      • 2013-04-26
      相关资源
      最近更新 更多