【问题标题】:Regular expressions allow any alphanumeric characters, any letters with accents and bullets, dashes and underscore正则表达式允许任何字母数字字符、任何带有重音符号和项目符号、破折号和下划线的字母
【发布时间】:2016-02-28 13:34:25
【问题描述】:

我正在做一个可以允许任何字符的正则表达式:

1. 任何大小写字母数字字符,包括ñ

2. 任意大小写字母,带重音“áéíóú”

3. 任何大写和小写字母都标有“äëïöü”

4.下划线

5.破折号

6.分

7.分号

8. 换行符

9. 删除所有特殊字符,例如:¡?=)(/&%$#"!|°¬´+}{}.,;:_[]¨*` 等。 ..

10.并指定最小和最大字符数,例如0到75之间

我查了很多资料,找到了很多函数,但是要实现这个我必须结合很多代码,我想在一个正则表达式中做到这一点。

我在做我自己的角色,到目前为止,我有一个允许任何字母数字字符、空格、破折号和点的功能,例如:

/^[a-zA-Z0-9_\-\. ]{0,75}+$/

我发现这个功能可以删除特殊字符:

function remove_characters_special($text = '') {    
    $text = preg_replace('~[^\\pL\d\.]+~u', ' ', $text);
    return $text;
}

对重音字母和项目符号执行此操作是否有效?

/^[a-zA-Z0-9_\-\. áéíóúÁÉÍÓÚñÑäëïÖüÄËÏÖü]{0,75}+$/

如何完成这个功能?

【问题讨论】:

  • 另外你的匹配模式需要是 unicode 正则表达式:^[\pL\pN\s._-]{0,75}$/u add u flag 如果输入是 utf-8 则使用 unicode categories。
  • @ bobble bubble - 非常感谢,我一直在测试,似乎脚本失败了,但我更改了模式 /^[\pL\pN\pZ._\-] {0,75}$/.,如果它有效,但如果我添加带重音符号或项目符号的字母失败,则需要转义模式中的脚本。
  • 哦!滑倒了。你试过$pattern = '/^[\pL\pN\s._-]{0,75}$/u';缺少起始分隔符吗。
  • @Bubble bobble - 完美运行,不需要转义脚本,只是一个细节,当这个 colo $Ñ 的字符串给出以下错误:注意:未定义变量:Ñ
  • 另外,如果我添加一个文本分号;或两点:显示错误。

标签: regex expression preg-match


【解决方案1】:

感谢@bobble bubble,经过长时间的交谈,我得到了我需要的正则表达式,我会分享给谁可以服务,如果他们需要在插入数据库之前过滤所有数据,即使你接受逗号、分号和双点,之后您可能会添加更多允许的特殊字符。

$text = "áéíóú ÁÉÍÓÚ äëïöüÄËÏÖÜ - _ , : ; ";
$pattern = '/^[,:;\pL\pN\s._-]{0,75}$/u';

if (!preg_match($pattern, $text)) {
    echo "No valid";
}   else {
    echo "valid";
}

其他例子:这些代码是我的例子,如果有PHP GURU谁有更简单的方法,会有所帮助。

1.不指定字符数。

$pattern = '/^[,:;\pL\pN\s._-]+$/u';

2。允许使用双引号和单引号以及括号而不指定字符数。

$pattern = '/^[\'\'\"\"\(\),:;\pL\pN\s._-]+$/u';

@泡泡泡泡非常感谢你,我爱你:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多