PHP正则表达式中的OR运算符(包括unicode验证)

时间:2009-06-08 09:35:57

标签: php regex

感谢S. Gehrig在initial question中的回答我得到了一个正常的正则表达式并且根据Letter属性验证变量(除了中文,但这是另一个主题:):

if (preg_match('/^\p{L}+$/u', $input)) {
    // OK
}

不幸的是,我不能将其扩展到支持数字相应的问题/感叹&合。我的实验包括:

'/^[\p{L}]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]+$/u'
'/^[\p{L}+]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]$/u'
'/^[\p{L}+]|[0-9]|[\n]|[']|[\?]|[\!]|[\.]|[\,]$/u'

正确的正则表达式是什么?请指出我正确的方向。

很多,非常感谢!

1 个答案:

答案 0 :(得分:1)

\p{L}+已经是“\p{L}的非空字符串”。另一方面,[]表示“其中一个”,因此根据您的实际要求,其中任何一个都应该有效:

序列中任何(正,非零)指定字符数:

/^[\p{L}0-9\n'?!.,]+$/u

\p{L} s序列或混合[0-9\n'?!.,]序列:

/^(\p{L}+|[0-9\n'?!.,]+)$/u

\p{L} s序列或[0-9\n'?!.,]

中的一个序列
/^(\p{L}+|[0-9\n'?!.,])$/u