【发布时间】: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}$/uadduflag 如果输入是 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