2012-11-04 37 views
2

我正在詢問用戶的姓和名的表單,我不想讓他們進入PHP刪除一切,除了字母和連字符( - )

$heil4 

我想他們喜歡進入

Sheila 

我知道如何過濾掉一切,除了信件,但我知道,有些名稱可以有

Sheila-McDonald 

那麼,除了字母和連字符以外,我怎樣才能從字符串中刪除所有內容?

+1

從什麼時候你知道有人用他們的名字編號? – Frank

+0

採取的要點(關於下劃線也可能),但非拉丁字母呢? – raina77ow

+0

告訴我們你現在擁有什麼,所以我們可以改進,而不是做一些全新的東西 –

回答

2

$new = preg_replace('#[^A-Z-]#iu', '', $data);

,而不是刪除字母(並因此修改用戶的輸入),但更好的驗證它 ,並顯示一個錯誤,如果輸入是無效的。這樣,用戶就知道他已經進入究竟是什麼價值,你有

if(!preg_match('#[A-Z-]#iu', $data)) echo 'invalid';

+0

將無法​​按計劃工作。 – raina77ow

+0

@ raina77ow,隨意編輯並使其按照計劃工作 – Alex

+0

您在這裏誤用類範圍:用'[Az]'介於'Z'和'a'之間的所有符號(例如'[',例如)將不會被替換。 – raina77ow

3

只需使用

$s = preg_replace("/[^a-z-]/i", "", $s); 

,或者如果你想添加一些非ASCII字符轉換爲ASCII,這樣的作爲Jean-RémyJean-Remy,然後用

$s = preg_replace("/[^a-z-]/i", "", iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s)); 
+0

優秀的片段! +1,將使用:) – Eamonn

+0

將非ascii字符轉換爲ascii不能與上面的代碼一起使用 – OnePunchMan

+0

@OnePunchMan - 在http://ideone.com/7LdIJi查看並測試代碼 –

2

而是什麼也沒有更換的,有一番情趣。這種辦法,主要號碼,你可以解碼的由名稱,P

$name = '$h3il4-McD0nald'; 

$find = array(0,1,3,4,5,6,7,'$'); 
$replace = array('o','l','e','a','s','g','t','s'); 
$name = str_replace($find,$replace,$name); 

//Sheila-McDonald 
echo ucfirst(preg_replace('/[^a-z-]/i', '', $name)); 
+0

'/ s'修飾符是什麼。 。? –

+0

好吧,現在當你編輯你的答案並進行更正時,你的代碼與我的代碼非常相似:) –

+0

ok'/ s'表示單行,這是一個錯字,'/ i'表示不區分大小寫,意思是有沒有使用的AZ字符集,亨氏我離開了它....感謝downvote :) –

0

使用該剝離所有非字母數字字符,不包括非拉丁字符,並prescribedpunctuation

$strtochange= preg_replace("/[^\s\p{Pd}a-zA-ZÀ-ÿ]/",'',$strtochange);

注:這會變成$heil4heil