2009-08-25 28 views
33

के साथ अल्फान्यूमेरिक के रूप में मान्य करें मेरे पंजीकरण पृष्ठ पर मुझे केवल उपयोगकर्ता नामों को अल्फान्यूमेरिक के रूप में मान्य करने की आवश्यकता है, लेकिन वैकल्पिक अंडरस्कोर के साथ भी। मैं इस के साथ आ गया है:उपयोगकर्ता नाम को अंडरस्कोर

function validate_alphanumeric_underscore($str) 
{ 
    return preg_match('/^\w+$/',$str); 
} 

कौन सा ठीक काम करने लगता है, लेकिन मैं एक regex विशेषज्ञ नहीं हूँ! क्या किसी को कोई समस्या है?

+0

इस हाइफ़न की अनुमति देगा और मैं अवधि के बारे में सोच के रूप में अच्छी तरह से –

+0

मैं खाली स्थान के बारे में सोच के रूप में अच्छी तरह से डब्ल्यू –

+0

पूर्व के लिए के साथ \ मान्य हो सकता है, \ (अल्फान्यूमेरिक प्लस "_") एक "शब्द" अक्षर से मेल खाता डब्ल्यू, आधिकारिक पर्ल दस्तावेज के अनुसार: http://www.perl.com/doc/manual/html/pod/perlre.html –

उत्तर

65

वास्तविक matched characters of \w depend on the locale जाता है कि इस्तेमाल किया जा रहा:

ए 'शब्द "चरित्र किसी भी अक्षर या अंक या अंडरस्कोर वर्ण, कि है, किसी भी चरित्र है जो एक पर्ल" शब्द का हिस्सा हो सकता है "। अक्षरों और अंकों की परिभाषा को पीसीआरई की वर्ण तालिकाओं द्वारा नियंत्रित किया जाता है, और यदि लोकेल-विशिष्ट मिलान हो रहा है तो भिन्न हो सकता है। उदाहरण के लिए, "fr" (फ्रेंच) लोकेल में, 128 से अधिक वर्ण कोड कुछ उच्चारण अक्षरों के लिए उपयोग किए जाते हैं, और इन्हें मिलान किया जाता है।

/^[A-Za-z0-9_]+$/ 

यह सिर्फ अक्षरांकीय अक्षर और अंडरस्कोर अनुमति देता है:

तो तुम बेहतर स्पष्ट रूप से क्या वे वर्ण जो आप अनुमति देना चाहते हैं निर्दिष्ट करना चाहिए।

और अगर आप केवल संयोजन चरित्र के रूप में अंडरस्कोर अनुमति देना चाहते हैं और मजबूर करने के लिए है कि उपयोगकर्ता नाम एक वर्णमाला चरित्र के साथ प्रारंभ होना चाहते हैं:

/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/ 
+1

क्यों?\ w बिल्कुल अल्फान्यूमेरिक वर्ण और अंडरस्कोर है। –

+11

असल में, \ w सक्रिय लोकेल के अनुसार अल्फान्यूमेरिक वर्ण और अंडरस्कोर है, इसलिए परिस्थितियों के आधार पर, यह 'ü' या 'ö' जैसे वर्णों से मेल खा सकता है। –

+1

@af, आह, आप सही हैं। सुधारों के लिए धन्यवाद! –

10

कोशिश

function validate_alphanumeric_underscore($str) 
{ 
    return preg_match('/^[a-zA-Z0-9_]+$/',$str); 
} 
3

मेरे लिए ठीक लग रहा है। ध्यान दें कि अंडरस्कोर के प्लेसमेंट के लिए आपको कोई आवश्यकता नहीं है, इसलिए "username_" और "___username" दोनों पास होंगे।

+0

क्या आप मुझे बता सकते हैं कि अक्षरों के बीच एक अंडरस्कोर सीमा को कैसे सेट करें? – AlexioVay

0

आपका स्वयं का समाधान बिल्कुल ठीक है।

preg_match Perl- जैसे नियमित अभिव्यक्ति, जिसमें चरित्र वर्ग \w सटीक रूप से मेल करने के लिए परिभाषित का उपयोग करता है कि तुम क्या जरूरत है:

\w - मैच एक "शब्द" चरित्र (अल्फान्यूमेरिक प्लस "_")

(source)

16

यहाँ एक सरणी ओ के साथ संयोजन के रूप में PHP ctype_alnum का उपयोग करके स्ट्रिंग मान्य करने के लिए एक कस्टम समारोह है च अनुमति वर्ण:

<?php 

$str = ""; 
function validate_username($str) { 

    // each array entry is an special char allowed 
    // besides the ones from ctype_alnum 
    $allowed = array(".", "-", "_"); 

    if (ctype_alnum(str_replace($allowed, '', $str))) { 
    return $str; 
    } else { 
    $str = "Invalid Username"; 
    return $str; 
    } 
} 

?> 
+4

आम तौर पर, मैं नियमित अभिव्यक्ति से बचना पसंद करता हूं जहां मैं कर सकता हूं। इस तरह के सत्यापन के लिए यह कम त्रुटि प्रवण प्रतीत होता है और समझने में आसान है (डेवलपर को केवल php को जानने की आवश्यकता है, रेगेक्स वाक्यविन्यास जानने की आवश्यकता नहीं है)। समाधान PHP के लिए अद्वितीय है, लेकिन यही वह है जिसे मैं ढूंढ रहा हूं। धन्यवाद। –

1

मैं gumbo के माध्यमिक regex ले जाएगा, केवल संयोजन के रूप में अंडरस्कोर अनुमति देने के लिए, लेकिन उसके बाद एक + जोड़ने _ तो एक उपयोगकर्ता "special__username", बस एक छोटी सी ट्वीक की तरह हो सकता है।

/^[A-Za-z][A-Za-z0-9]*(?:_+[A-Za-z0-9]+)*$/

संबंधित मुद्दे