PHP和regexp只接受格式中的希腊字符
我需要一个正则表达式,它在我的表单(PHP)中只接受希腊字符和空格作为名称字段。PHP和regexp只接受格式中的希腊字符,php,regex,Php,Regex,我需要一个正则表达式,它在我的表单(PHP)中只接受希腊字符和空格作为名称字段。 我在网上尝试了一些发现,但没有成功。任何帮助都将不胜感激。我对希腊字母表不太熟悉,但如果您想使用罗马字母表,您可以这样做: /^[a-zA-Z\s]*$/ 因此,要使用希腊文实现这一点,需要将a和z替换为希腊文字母表的第一个和最后一个字母。如果我没记错的话,它们是α和ω。因此,代码应该是: /^[α-ωΑ-Ω\s]*$/ utf-8中的希腊语和科普特语似乎在U+0370-U+03FF范围内。请注意:空格、a-、
我在网上尝试了一些发现,但没有成功。任何帮助都将不胜感激。我对希腊字母表不太熟悉,但如果您想使用罗马字母表,您可以这样做:
/^[a-zA-Z\s]*$/
因此,要使用希腊文实现这一点,需要将a
和z
替换为希腊文字母表的第一个和最后一个字母。如果我没记错的话,它们是α和ω。因此,代码应该是:
/^[α-ωΑ-Ω\s]*$/
utf-8中的希腊语和科普特语似乎在U+0370-U+03FF范围内。请注意:空格、a
-
、a
等都不是……UTF-8中的现代希腊字母表位于
因此,您需要接受纯希腊语字符的正则表达式是:
$regex_gr = '/^[\x{0386}-\x{03CE}]+$/u';
或(带空格)
完整字母解决方案,带重音字母:
/^[A-Za-zΑ-Ωα-ωίϊΐόάέύϋΰήώ]+$/
这里的其他答案不适合我。希腊Unicode字符包含在以下两个块中
- 希腊语和科普特语U+0370至U+03FF(普通希腊字母)
- 希腊文扩展U+1F00至U+1FFF(带变音符号的希腊文字母)
[\u0370-\u03ff\u1f00-\u1fff]+
我将让读者将其翻译成他们可能使用的任何编程语言格式
另见
/^[a-zA-Z\p{Greek}]+$/u
资料来源:为了详细说明leo pal的答案,一个更完整的正则表达式,它甚至可以接受大写希腊字母,如下所示:
/^[α-ωΑ-ΩίϊΐόάέύϋΰήώΊΪΌΆΈΎΫΉΏ\s]+$/
有了这个,您可以:
-小写字母α-ω
-大写字母Α-Ω
带所有(现代)变音符号的小写字母
带所有(现代)变音符号的大写字母
-任何空白字符\s
注:以上不考虑古希腊的发音(ᾶ, ἀ, 刚刚在优秀的网站上注意到希腊字符的范围从“Ά”(902)到“ώ”(974),其中有3个字符不是阿帕贝字符:“·”(903)和不可打印字符0907、0909 因此,范围
[Ά-ώ]
将覆盖99.99%的案例
使用
(?![·\u0907\u0909])[Ά-ώ]
覆盖100%。(虽然我在PHP中没有检查这一点)每当有人试图这样限制输入范围时,我会问自己:这真的是个好主意吗?您可能有一个有效的用例,但通常情况下这是过分的-想象一个居住在希腊的非希腊名字的人,或者一个外国人试图在世界其他地方输入一个临时地址,等等。无论哪种方式,您都应该添加更多信息:您正在比较的数据是什么字符集?UTF-8?你尝试了哪些发现?(否则你可能会得到完全相同的建议。)看起来这几乎是早期(6个多月前)答案的复制/粘贴。。。如果前面的答案有一些显著的改进,最好概括/解释一下。谢谢。当希腊字母上面有带符号的修饰语时?@blackuprise-那将是一个完全不同的问题。处理变音符号是很重要的。@JasonCoyne-这个答案不能解释带变音符号的大写字母,尽管i
标志可以解决这个问题。尽管如此,出于几个原因,对我来说,把它们全部写出来似乎不是最好的方法。不管怎样,如果你是反对者,请看我之前的评论:@blackuprise的问题是一个不同的用例。这是对@bikey77问题的书面回答,显然它解决了问题。除了你的回答之外,我还建议如下:/^[A-Za-zΑ-Ωα-ωίάίΰΰΰΰ]+$/
。请注意,我已将第二个范围从A-z
更改为A-z
。这不包括其他希腊字母重音。请参阅扩展的希腊Unicode块。这还需要包括Ά、Έ、Ί、Ό、⎍、Ή
/^[α-ωΑ-ΩίϊΐόάέύϋΰήώΊΪΌΆΈΎΫΉΏ\s]+$/