preg_match中的重音字母

时间:2019-06-07 12:47:00

标签: php

我需要一个可以接受名字(姓和名)的代码。因此,我需要它仅接受字母,并且也应接受带重音的字母(诸如á,č,ť,í,é,ľ,š,ď,ž,ý等字母->这些都是斯洛伐克字母)。在姓和名之间加上一个空格。

我已经尝试过在该网站上找到的一些代码,但没有任何效果。

我想填写一张表格,如果姓名填写错误,它将给您警告。现在我有了这段代码:

eventImgUrl: "www.test.test"

这是我使用的两个功能:

const onSubmit = (e) => {
e.preventDefault();
if (eventImage) {
    const uploadImage = storage.ref(`EventImages/${values.eventName}`)
    uploadImage.put(eventImage).then(() => {
        storage.ref('EventImages').child(values.eventName).getDownloadURL().then(url => {
            dbref.add({
                eventName: values.eventName,
                eventVenue: values.eventVenue,
                eventAddress: values.eventAddress,
                eventCategory: values.eventCategory,
                eventOrganizer: values.eventOrganizer,
                eventPhone: values.eventPhone,
                eventEmail: values.eventEmail,
                eventDetails: values.eventDetails,
                eventDate: selectedDate.toDateString(),
                eventTime: selectedDate.toLocaleTimeString(),
                eventImgUrl: url
            }).then((docRef) => {
                console.log("Document written with ID: ", docRef.id);
                setValues('');
                setImg('');
                setUrl('');
            }).catch((error) => {
                console.error("Error adding document: ", error);
            });
        })
    })

}
}

但是问题是当我不填写姓名时,我得到的警告是“您使用了错误的字母”,但我应该得到“您未填写姓名”。问题在这里

$mistakes = array();

if (isset($_POST["submit"])) {
    if (isset($_POST['name'])) $name = securee($_POST['name']); else $name = '';


    if (!check_lenght_of_name($name)) $mistakes['name'] = 'Name has wrong lenght';
    if (empty($name)) $mistakes['meno'] = 'You didnt fill name';    
    if (!preg_match("~^\p{L}+(?:[-\h']\p{L}+)*$~u", $name)) $mistakes['name'] = 'You used a wrong letter';



}



if (!empty($mistakes)) {
        echo '<p class="mist"><strong>Mistakes</strong>:<br>';
        foreach($mistakes as $mis) {
            echo "$mis<br>\n";
        }
        echo '</p>';

}

我已经尝试了几个preg_match代码,但是没有任何效果,因为我希望它能正常工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要此正则表达式:

/^[A-Záčťíéľšďžý]+ [A-Záčťíéľšďžý]+$/i
  1. /^[A-Záčťíéľšďžý]+:必须以批准的字符集中的至少一个字符开头
  2. :必须紧跟一个空格
  3. [a-zA-Záčťíéľšďžý]+$/:必须以批准的字符集中的至少一个字符结尾
  4. i:不区分大小写

对于以后的正则表达式调试,我强烈建议使用https://regexr.com/,以便您可以非常迅速地编写和测试正则表达式,并且网站将解释正则表达式的作用。